public virtual bool AnotherAccountIsStillOpened(HttpListenerContext context, User user) { if ((DateTime.Now - user.LastAccess).TotalMinutes > 15) { return(false); } var serviceArgs = RequestArgs.NewRequestArgs(context, this.server, user); var t = new SecurityAccountRequest { OriginalIP = user.Address?.ToString(), YourIP = context.Request.RemoteEndPoint.ToString(), Wait = 300000, IsSuccess = false }; serviceArgs.Send(t); return(true); }
protected virtual bool OnRequest(HttpListenerContext context) { if (context.Request.HttpMethod == "OPTIONS") { ApisHandler.RespondOptions(context); return(true); } context.Response.AppendHeader("Access-Control-Allow-Origin", "*"); var user = ApiHandler.CheckAuth(context, out bool logged); if (user != null || logged) { var serviceArgs = RequestArgs.NewRequestArgs(context, this, user); if (serviceArgs.Service == null) { serviceArgs.SendCode(HttpStatusCode.OK); } else if (serviceArgs.Service.CanbeDelayed(serviceArgs)) { CommandsQueue.Add(new CommandsParam(serviceArgs, ExecuteCommand, this)); return(false); } else { using (serviceArgs) { Api(serviceArgs); return(!serviceArgs.IsBusy); } } } else { context.Response.StatusCode = (int)HttpStatusCode.Forbidden; } return(true); }
public virtual bool PublicApi(HttpListenerContext context, string raw) { switch (context.Request.Url.LocalPath.ToLower()) { case "/~checklogging": IsLoged(context); break; case "/~login": Login(context); break; case "/~signup": Signup(context); break; case "/~signout": Signout(context); break; case "/~newGuid": Server.Send(context, (context.Response.ContentEncoding ?? context.Request.ContentEncoding ?? Encoding.UTF8).GetBytes(Guid.NewGuid().ToString())); break; case "/~guid": var r = string.Format(Server.SGuidService, GuidService.GetGuid()); Server.Send(context, (context.Response.ContentEncoding ?? context.Request.ContentEncoding ?? Encoding.UTF8).GetBytes(r)); break; case "/~issecured": Server.Send(context, RequestArgs.https ? Server.True : Server.False); break; case "/~sessionid": Server.Send(context, (context.Response.ContentEncoding ?? context.Request.ContentEncoding ?? Encoding.UTF8).GetBytes(SessionIdService.SessionId)); break; case "/~isadmin": var cc = getId(context); User user = null; if (cc != null && (_connectedUsers.TryGetValue(cc, out user))) { if (user.IsBlocked) { _connectedUsers.Remove(cc); context.Response.StatusCode = (int)HttpStatusCode.Forbidden; break; } if (context.Request.RemoteEndPoint.Address.GetHashCode() != user.Address.GetHashCode()) { if (AnotherAccountIsStillOpened(context, user)) { context.Response.StatusCode = (int)HttpStatusCode.Forbidden; } user.Address = context.Request.RemoteEndPoint.Address; } using (var rr = RequestArgs.NewRequestArgs(context, this.server, user)) if (user.IsAgent) { rr.SendSuccess(); } else { rr.SendFail(); } } break; default: if (raw.StartsWith("/~$?id") || raw.StartsWith("/~%24?")) { Downloader.Send(context); } else { return(false); } break; } context.Response.Close(); return(true); }