public HUAuthenticationModule(IHUServerContext serverContext) : base("/a") { ServerContext = serverContext; Post("/register", async args => { try { var registration = this.Bind <RegistrationRequest>(); // Validate registration if (registration.FullName == null) { return(new TextResponse("Invalid name") .WithStatusCode(HttpStatusCode.BadRequest)); } if (registration.GHAuthToken == null) { return(new TextResponse("Invalid auth token") .WithStatusCode(HttpStatusCode.BadRequest)); } // email: if (!Regex.IsMatch(registration.HangoutsEmail, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase)) { return(new TextResponse("Invalid email") .WithStatusCode(HttpStatusCode.BadRequest)); } // test the auth token to make sure it works try { var ghClient = new GitHubClient(new ProductHeaderValue(nameof(HUAuthenticationModule))); ghClient.Credentials = new Credentials(registration.GHAuthToken); var ghUser = await ghClient.User.Current(); var um = new UserManagerService(ServerContext); var registeredUser = await um.RegisterUserAsync(registration, ghUser.Login); if (registeredUser != null) { return(Response.AsJsonNet(registeredUser)); } } catch { return(HttpStatusCode.BadRequest); } return(HttpStatusCode.Unauthorized); } catch { return(HttpStatusCode.BadRequest); } }); }
public UserApiLoginValidator(IHUServerContext serverContext) { ServerContext = serverContext; UserManager = new UserManagerService(ServerContext); }
public KonnectModule(IHUServerContext serverContext) : base("/a/k") { ServerContext = serverContext; this.RequiresClaims(x => x.Value == UserApiLoginValidator.StatelessAuthClaim.Value); RegisteredUser user = null; string apiKey = null; Before += (ctx) => { apiKey = (string)Context?.Request.Query.apikey; if (apiKey != null) { UserManager = new UserManagerService(ServerContext); user = UserManager.FindUserByApiKey(apiKey); } return(null); }; Post("/ping", args => { try { var pingReq = this.Bind <PingRequest>(); var connUser = ServerContext.ConnectedUsers.Find(x => x.DbUser.ApiKey == apiKey); var loc = new GeoCoordinate(pingReq.Latitude, pingReq.Longitude); if (connUser == null) { connUser = new ConnectedUser(user); connUser.Ping(loc); ServerContext.ConnectedUsers.Add(connUser); } else { connUser.Ping(loc); } return(HttpStatusCode.OK); } catch { return(HttpStatusCode.BadRequest); } }); Post("/nearby/{dist}", args => { try { double distanceRange = (double)args.dist; // get current user var connUser = ServerContext.ConnectedUsers.Find(x => x.DbUser.ApiKey == apiKey); if (connUser == null) { return(HttpStatusCode.BadRequest); } // var nearbyUsers = ServerContext.ConnectedUsers.FindAll(x => x != connUser && x.LastLocation != null && connUser.LastLocation.GetDistanceTo(x.LastLocation) < distanceRange); var nearbyUsers = new List <ConnectedUser>(); foreach (var u in ServerContext.ConnectedUsers) { if (u != connUser && u.LastLocation != null) { var uDist = connUser.LastLocation.GetDistanceTo(u.LastLocation); if (uDist < distanceRange) { nearbyUsers.Add(u); } } } return(Response.AsJsonNet(nearbyUsers.Select(x => new NearbyUser { Distance = connUser.LastLocation.GetDistanceTo(x.LastLocation), UserId = x.DbUser.PublicUserId, Name = x.DbUser.FullName }))); } catch { return(HttpStatusCode.BadRequest); } }); Post("/profile/{publicId}", async args => { try { var publicId = (string)args.publicId; if (publicId == null) { return(HttpStatusCode.BadRequest); } var selectedUser = UserManager.FindUserByPublicId(publicId); if (selectedUser == null) { return(HttpStatusCode.NotFound); } var ghClient = new GitHubClient(new ProductHeaderValue(nameof(HUAuthenticationModule))); var githubUser = await ghClient.User.Get(selectedUser.GitHubUsername); var profile = new UserProfile { RepoCount = githubUser.PublicRepos, FullName = selectedUser.FullName, HangoutsEmail = selectedUser.HangoutsEmail, GitHubUsername = selectedUser.GitHubUsername, GitHubBio = githubUser.Bio, Company = githubUser.Company, HomeLocation = githubUser.Location }; return(Response.AsJsonNet(profile)); } catch { return(HttpStatusCode.BadRequest); } }); }
public HUEventLoop(IHUServerContext serverContext) { ServerContext = serverContext; var t = RunAsync(); }
public UserManagerService(IHUServerContext serverContext) { ServerContext = serverContext; UserStore = ServerContext.Database.GetCollection <RegisteredUser>(UserStoreDataKey); }