using System.Net; using System.Text; namespace Server; class Program { static void Main() { // create server HttpListener listener = new(); // routes need to be added first listener.Prefixes.Add("http://localhost:5000/api/login/"); listener.Prefixes.Add("http://localhost:5000/api/register/"); listener.Prefixes.Add("http://localhost:5000/api/posts/"); listener.Prefixes.Add("http://localhost:5000/api/posts/like/"); listener.Prefixes.Add("http://localhost:5000/api/posts/unlike/"); listener.Prefixes.Add("http://localhost:5000/api/comment/"); listener.Prefixes.Add("http://localhost:5000/api/profile/"); listener.Prefixes.Add("http://localhost:5000/api/profile/experience/"); listener.Prefixes.Add("http://localhost:5000/api/profile/education/"); // listen listener.Start(); Console.WriteLine("Server is listening on http://localhost:5000/"); while (true) { HttpListenerContext context = listener.GetContext(); HttpListenerRequest request = context.Request; HttpListenerResponse response = context.Response; response.Headers.Add("Access-Control-Allow-Origin", "http://localhost:5173"); response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); response.Headers.Add("Access-Control-Allow-Headers", "Content-Type, Authorization"); // url after localhost:5000/ string uri; if (request != null && request.Url != null) uri = request.Url.AbsolutePath; else return; switch (request.HttpMethod) { case "GET": HandleGet(uri, request, response); break; case "POST": HandlePost(uri, request, response); break; case "DELETE": HandleDelete(uri, request, response); break; case "PUT": HandlePut(uri, request, response); break; default: HandleMissingPath(response); break; } } } private static void HandlePut( string uri, HttpListenerRequest request, HttpListenerResponse response ) { if (request.HasEntityBody) switch (uri) { case "/api/profile": UpdateProfile.HandleRequest(request, response); break; case "/api/education": UpdateEducation.HandleRequest(request, response); break; case "/api/experience": UpdateExperience.HandleRequest(request, response); break; case "/api/post": UpdatePost.HandleRequest(request, response); break; case "/api/comment": UpdateComment.HandleRequest(request, response); break; case "/api/posts/like": UpdatePost.HandleLikes(request, response); break; // case "/api/posts/unlike": // RemoveLike.HandleRequest(request, response); // break; default: HandleMissingPath(response); break; } else { HandleMissingPath(response); } } private static void HandleDelete( string uri, HttpListenerRequest request, HttpListenerResponse response ) { if (request.HasEntityBody) switch (uri) { case "/api/profile": DeleteProfile.HandleRequest(request, response); break; case "/api/profile/education": DeleteEducation.HandleRequest(request, response); break; case "/api/profile/experience": DeleteExperience.HandleRequest(request, response); break; case "/api/posts": DeletePost.HandleRequest(request, response); break; case "/api/comment": DeleteComment.HandleRequest(request, response); break; default: HandleMissingPath(response); break; } else { HandleMissingPath(response); } } private static void HandlePost( string uri, HttpListenerRequest request, HttpListenerResponse response ) { if (request.HasEntityBody) switch (uri) { case "/api/profile": CreateProfile.HandleRequest(request, response); break; case "/api/profile/education": CreateEducation.HandleRequest(request, response); break; case "/api/profile/experience": CreateExperience.HandleRequest(request, response); break; case "/api/posts": CreatePost.HandleRequest(request, response); break; case "/api/comment": CreateComment.HandleRequest(request, response); break; case "/api/register": Register.HandleRequest(request, response); break; case "/api/login": Login.HandleRequest(request, response); break; default: HandleMissingPath(response); break; } else { HandleMissingPath(response); } } private static void HandleGet( string uri, HttpListenerRequest request, HttpListenerResponse response ) { switch (uri) { default: HandleMissingPath(response); break; } } private static void HandleMissingPath(HttpListenerResponse response) { response.StatusCode = 404; string errorMessage = "Not Found"; byte[] buffer = Encoding.UTF8.GetBytes(errorMessage); response.ContentType = "text/plain"; response.ContentLength64 = buffer.Length; response.OutputStream.Write(buffer, 0, buffer.Length); response.OutputStream.Write(buffer, 0, buffer.Length); } }