private static void validateSession(byte[] sessionKey) { if (!ServerSession.getInstance().isSessionValid(sessionKey)) { throw new NotSupportedException(); } }
public static JObject SendResponse(HttpListenerRequest request) { string[] uriSegments = request.Url.Segments; string endpoint = uriSegments[uriSegments.Length - 1]; string text; using (var reader = new StreamReader(request.InputStream, request.ContentEncoding)) { text = reader.ReadToEnd(); } JObject responseJson = new JObject(); if (text.Length == 0) { return(responseJson); } JObject requestJson = JObject.Parse(text); byte[] sessionKey = new byte[0]; switch (endpoint) { case "map/": Console.WriteLine("maps were requested"); return(createDefaultMapsObject()); case "login/": string user = (string)requestJson["user"]; Console.WriteLine("login attempt from: " + user); string pass = (string)requestJson["pass"]; if (ServerSession.getInstance().validateUser(user, pass)) { byte[] newSessionKey = ServerSession.getInstance().createNewSessionKey(user); responseJson.Add("session", newSessionKey); Console.WriteLine("login successful"); return(responseJson); } else { responseJson.Add("session", null); Console.WriteLine("login failed"); return(responseJson); } case "logout/": Console.WriteLine("logout attempt"); sessionKey = (byte[])requestJson["session"]; ServerSession.getInstance().endSession(sessionKey); Console.WriteLine("logout successful"); return(responseJson); case "valid/": Console.WriteLine("validate session"); sessionKey = (byte[])requestJson["session"]; responseJson.Add("isValid", ServerSession.getInstance().isSessionValid(sessionKey)); return(responseJson); case "save/": sessionKey = (byte[])requestJson["session"]; validateSession(sessionKey); string name = (string)requestJson["name"]; Console.WriteLine("Attempt to save map: " + name); using (StreamWriter file = File.CreateText(Path.Combine(getDir(), name + ".json"))) using (JsonTextWriter writer = new JsonTextWriter(file)) { requestJson.WriteTo(writer); } return(responseJson); default: Console.WriteLine("Path requested"); sessionKey = (byte[])requestJson["session"]; validateSession(sessionKey); int[][] mapArray; JArray arr = (JArray)requestJson["map"]; int algorithm = (requestJson["algorithm"] != null) ? (int)requestJson["algorithm"] : 0; if (requestJson["settings"] != null) { JArray settings = (JArray)requestJson["settings"]; mapArray = applyCustomOptions(arr.ToObject <int[][]>(), settings.ToObject <int[]>()); } else { mapArray = arr.ToObject <int[][]>(); } switch (algorithm) { case 0: responseJson.Add("data", JArray.FromObject(PathfindingApi.calculatePathRandom(mapArray))); return(responseJson); case 1: responseJson.Add("data", JArray.FromObject(PathfindingApi.calculateAStar(mapArray))); return(responseJson); case 2: responseJson.Add("data", JArray.FromObject(PathfindingApi.calculateDijkstra(mapArray))); return(responseJson); case 3: responseJson.Add("data", JArray.FromObject(PathfindingApi.calculateGeneric(mapArray))); return(responseJson); case 4: responseJson.Add("data", JArray.FromObject(PathfindingApi.calculatePathOwn(mapArray))); return(responseJson); case 5: responseJson.Add("data", JArray.FromObject(PathfindingApi.calculatePathDumb(mapArray))); return(responseJson); default: responseJson.Add("data", JArray.FromObject(PathfindingApi.calculatePathRandom(mapArray))); return(responseJson); } } }