public IActionResult LoginValidation(TaintedUserModel taintedUser) { UserModel userModel = new UserBuilder() .UseName(taintedUser.Username) .UsePassword(taintedUser.Password) .Build(); if (userModel.isValidUser == true) { if (DBUserInfoLoginValidation(userModel)) { //tell UI "Login Successful; UserSnapshot userSnapshot = new UserSnapshot(userModel.getUsername()) { gameCredit = userModel.getGameCredit() }; return(Ok()); } else { //tell the UI "Invalid Username or Password" return(BadRequest()); } } else { //tell the UI "Invalid Username or Password" return(BadRequest()); } }
public async Task <string> LoginAsync(string connectId, string userName, string passwordHash) { var privateKey = await GetPrivateKeyAsync(connectId); if (privateKey is null) { return(null); } var val = RSAHelper.RSADecrypt(privateKey, passwordHash); if (string.IsNullOrEmpty(val)) { return(null); } var u = await userManager.FindByNameAsync(userName); var ok = await userManager.CheckPasswordAsync(u, val); if (ok) { var key = RedisKeyGenerator.Concat(RSAKey, connectId); await database.KeyDeleteAsync(key); var identity = new UserSnapshot { Email = u.Email, Id = u.Id, Name = u.NormalizedUserName }; var tk = await userIdentityService.SetIdentityAsync(identity); return(tk); } return(null); }
public async Task <string> LoginAsync(string connectId, string userName, string passwordHash) { var val = await DecryptAsync(connectId, passwordHash); if (string.IsNullOrEmpty(val)) { return(null); } var u = await userManager.FindByNameAsync(userName); if (u == null) { return(null); } var ok = await userManager.CheckPasswordAsync(u, val); if (ok) { var identity = new UserSnapshot { Email = u.Email, Id = u.Id, Name = u.NormalizedUserName }; var tk = await userIdentityService.SetIdentityAsync(identity); return(tk); } return(null); }
public async Task <string> SetIdentityAsync(UserSnapshot snapshot) { var tk = Guid.NewGuid().ToString("N"); var key = KeyGenerator.Concat(UserMapKey, tk); var bytes = JsonSerializer.SerializeToUtf8Bytes(snapshot); await database.StringSetAsync(key, bytes, ExpireTime); return(tk); }
protected override Snapshot CreateSnapshot() { var snapshot = new UserSnapshot { SourceId = Id, Username = Username, Password = Password, Salt = Salt, Age = Age, Male = Male }; return(snapshot); }
public async Task <IActionResult> LoginValidation(TaintedUserModel taintedUser) { UserModel userModel = new UserBuilder() .UseName(taintedUser.Username) .UsePassword(taintedUser.Password) .Build(); if (userModel.isValidUser == true) { if (DBUserInfoLoginValidation(userModel)) { //tell UI "Login Successful; UserSnapshot userSnapshot = new UserSnapshot(userModel.getUsername()) { gameCredit = userModel.getGameCredit() }; HttpContext.Session.SetString("sessionId", Guid.NewGuid().ToString()); //tell UI "Login Successful; UserDTO userDTO = new UserDTO(); userDTO.Username = userModel.getUsername(); //userDTO.Password = userModel.HashPassword(userModel.getPassword()); //This is causing the password to get hashed twice. Did we want this or was it something we didnt relize was going on. Removed it for now so I dont have to hash the login twice. userDTO.Password = userModel.getPassword(); userDTO.Email = userModel.getEmail(); userDTO.GameCredit = userModel.getGameCredit(); var sessionString = Guid.NewGuid().ToString(); await repository.AssignSessionIdToUserAsync(userDTO.Id, sessionString); Log.Information("User " + userModel.getUsername() + " Has logged in successfully"); return(Ok()); } else { //tell the UI "Invalid Username or Password" return(BadRequest()); } } else { //tell the UI "Invalid Username or Password" return(BadRequest()); } }
public static async Task Main(string[] args) { // Define two users with SVIDs User spike = new User("u-2a0057e6-356a-4a49-b825-c37796cb7bd9"); User brendan = new User("u-02c977bb-0a6c-4eb2-bfca-5e9101025aaf"); // Print their names and balances Console.WriteLine($"{await spike.GetUsernameAsync()} has ¢{await spike.GetBalanceAsync()}"); Console.WriteLine($"{await brendan.GetUsernameAsync()} has ¢{await brendan.GetBalanceAsync()}"); // Set the key for spike *can also be done as a second argument during creation* spike.SetAuthKey("this-is-a-key"); // Have spike send a transaction to brendan TaskResult result = await spike.SendCreditsAsync(100, brendan, "Friend payment"); // Log the result of the transaction Console.WriteLine(result.Info); // Need more data? // Use "snapshots" to get a large yet non-updating set of data from a group or user UserSnapshot snapShot = await spike.GetSnapshotAsync(); int messageCount = snapShot.discord_message_count; Console.WriteLine($"{await spike.GetUsernameAsync()} sent {messageCount} messages!"); // Create transaction hub object TransactionHub tHub = new TransactionHub(); // Hook transaction event to method tHub.OnTransaction += HandleTransaction; // Prevent process death while (true) { //Console.WriteLine("Test"); //Console.WriteLine(tHub.connection.State); Thread.Sleep(1000); } }
public async Task UpdateAsync(int osuId, Mode mode) { // 开始通过 API 获取用户信息和最近游玩记录。 var osuApi = _osuApiClient; var getUserTask = osuApi.GetUser(osuId, mode); // Create database context instance. using var dbContext = _contextFactory.CreateDbContext(); dbContext.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking; var snap = await(from s in dbContext.UserSnapshots where s.UserId == osuId && s.Mode == mode orderby s.Date descending select s.UserInfo).FirstOrDefaultAsync().ConfigureAwait(false); // Save snapshot to database. var userInfo1 = await getUserTask.ConfigureAwait(false); if (userInfo1 is null) { return; } if (userInfo1.PlayCount == snap?.PlayCount && userInfo1.Performance == 0) { return; // Inactive player. } userInfo1.Events = null; // Set to null to help compare. if (!PropertyEquals(userInfo1, snap)) { await dbContext.UserSnapshots.AddAsync(UserSnapshot.Create(osuId, mode, userInfo1)).ConfigureAwait(false); await dbContext.SaveChangesAsync().ConfigureAwait(false); } var userRecent = await osuApi.GetUserRecent(osuId, mode, 50).ConfigureAwait(false); if (userRecent is null || userRecent.Length == 0) {// The user didn't play, no need to check play number. return; } // Confirm play number. var userInfo2 = await osuApi.GetUser(osuId, mode).ConfigureAwait(false); if (userInfo2?.PlayCount == userInfo1.PlayCount) { var records = userRecent.OrderByDescending(r => r.Date) .Zip(CreateDescendingSequence(userInfo1.PlayCount), (r, n) => UserPlayRecord.Create(osuId, mode, n, r)) .ToList(); var currentMinPlayNumber = records.Last().PlayNumber; var strategy = dbContext.Database.CreateExecutionStrategy(); await strategy.ExecuteAsync(async() => { // Filter existing data. var existed = await dbContext.UserPlayRecords .Where(r => r.UserId == osuId && r.Mode == mode && r.PlayNumber >= currentMinPlayNumber) .Select(r => r.PlayNumber) .ToListAsync().ConfigureAwait(false); var inserting = records.Where(r => !existed.Contains(r.PlayNumber)).ToList(); // Insert data. if (inserting.Count > 0) { await dbContext.UserPlayRecords.AddRangeAsync(inserting).ConfigureAwait(false); await dbContext.SaveChangesAsync().ConfigureAwait(false); } }).ConfigureAwait(false); } else { //Logger.Info($"Concurrent error! Get different play_count in two queries. ({userInfo1.PlayCount}, {userInfo2?.PlayCount})"); //Logger.Info($"The user is {userInfo1.Name}({userInfo1.Id}); the mode is {mode}"); } }
private async void GetData_GetData_Click(object sender, EventArgs e) { List <string> urllist = new List <string>() { "https://spookvooper.com/user/search/a", "https://spookvooper.com/user/search/b", "https://spookvooper.com/user/search/c", "https://spookvooper.com/user/search/d", "https://spookvooper.com/user/search/e", "https://spookvooper.com/user/search/f", "https://spookvooper.com/user/search/g", "https://spookvooper.com/user/search/h", "https://spookvooper.com/user/search/i", "https://spookvooper.com/user/search/j", "https://spookvooper.com/user/search/k", "https://spookvooper.com/user/search/l", "https://spookvooper.com/user/search/m", "https://spookvooper.com/user/search/n", "https://spookvooper.com/user/search/o", "https://spookvooper.com/user/search/p", "https://spookvooper.com/user/search/q", "https://spookvooper.com/user/search/r", "https://spookvooper.com/user/search/s", "https://spookvooper.com/user/search/t", "https://spookvooper.com/user/search/u", "https://spookvooper.com/user/search/v", "https://spookvooper.com/user/search/w", "https://spookvooper.com/user/search/x", "https://spookvooper.com/user/search/y", "https://spookvooper.com/user/search/z", "https://spookvooper.com/user/search/0", "https://spookvooper.com/user/search/1", "https://spookvooper.com/user/search/2", "https://spookvooper.com/user/search/3", "https://spookvooper.com/user/search/4", "https://spookvooper.com/user/search/5", "https://spookvooper.com/user/search/6", "https://spookvooper.com/user/search/7", "https://spookvooper.com/user/search/8", "https://spookvooper.com/user/search/9", "https://spookvooper.com/user/search/,", "https://spookvooper.com/group/search/a", "https://spookvooper.com/group/search/b", "https://spookvooper.com/group/search/c", "https://spookvooper.com/group/search/d", "https://spookvooper.com/group/search/e", "https://spookvooper.com/group/search/f", "https://spookvooper.com/group/search/g", "https://spookvooper.com/group/search/h", "https://spookvooper.com/group/search/i", "https://spookvooper.com/group/search/j", "https://spookvooper.com/group/search/k", "https://spookvooper.com/group/search/l", "https://spookvooper.com/group/search/m", "https://spookvooper.com/group/search/n", "https://spookvooper.com/group/search/o", "https://spookvooper.com/group/search/p", "https://spookvooper.com/group/search/q", "https://spookvooper.com/group/search/r", "https://spookvooper.com/group/search/s", "https://spookvooper.com/group/search/t", "https://spookvooper.com/group/search/u", "https://spookvooper.com/group/search/v", "https://spookvooper.com/group/search/w", "https://spookvooper.com/group/search/x", "https://spookvooper.com/group/search/y", "https://spookvooper.com/group/search/z", "https://spookvooper.com/group/search/0", "https://spookvooper.com/group/search/1", "https://spookvooper.com/group/search/2", "https://spookvooper.com/group/search/3", "https://spookvooper.com/group/search/4", "https://spookvooper.com/group/search/5", "https://spookvooper.com/group/search/6", "https://spookvooper.com/group/search/7", "https://spookvooper.com/group/search/8", "https://spookvooper.com/group/search/9", "https://spookvooper.com/group/search/," }; List <string> allsvidlist = new List <string>(); HtmlWeb hw = new HtmlWeb(); GetData_Status.Text = "Getting SVIDs..."; GetData_Progress.Maximum = 72; foreach (string url in urllist) { HtmlAgilityPack.HtmlDocument doc = hw.Load(url); foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) { string rawnode = link.OuterHtml;; string[] rawsplit = rawnode.Split(">"); string linkcontent = rawsplit[0].Replace("<a href=", ""); if (linkcontent.Contains("svid=")) { string svids = linkcontent.Replace("/User/Info?svid=", ""); string svid = svids.Replace("\"", ""); allsvidlist.Add(svid); } else if (linkcontent.Contains("groupid=")) { string svids = linkcontent.Replace("/Group/View?groupid=", ""); string svid = svids.Replace("\"", ""); allsvidlist.Add(svid); } } GetData_Progress.Increment(1); } var database = new Dictionary <string, Dictionary <string, Dictionary <string, dynamic> > >(); List <string> distinctsvid = allsvidlist.Distinct().ToList(); distinctsvid.Sort(); GetData_Status.Text = "Getting Data..."; GetData_Progress.Value = 0; GetData_Progress.Maximum = distinctsvid.Count; foreach (string svid in distinctsvid) { if (svid.StartsWith("u-")) { User u = new User(svid); UserSnapshot snapShot = await u.GetSnapshotAsync(); string date = DateTime.Now.ToString("dd-MM-yy"); database[svid] = new Dictionary <string, Dictionary <string, object> >(); database[svid][date] = new Dictionary <string, object>(); database[svid][date]["api use count"] = snapShot.api_use_count; database[svid][date]["comment likes"] = snapShot.comment_likes; database[svid][date]["credits"] = snapShot.Credits; database[svid][date]["description"] = snapShot.description; database[svid][date]["discord ban count"] = snapShot.discord_ban_count; database[svid][date]["discord commends"] = snapShot.discord_commends; database[svid][date]["discord commends sent"] = snapShot.discord_commends_sent; database[svid][date]["discord game xp"] = snapShot.discord_game_xp; database[svid][date]["discord id"] = snapShot.discord_id; database[svid][date]["discord kick count"] = snapShot.discord_kick_count; database[svid][date]["discord last commend hour"] = snapShot.discord_last_commend_hour; database[svid][date]["discord last commend message"] = snapShot.discord_last_commend_message; database[svid][date]["discord last message minute"] = snapShot.discord_last_message_minute; database[svid][date]["discord message count"] = snapShot.discord_message_count; database[svid][date]["discord message xp"] = snapShot.discord_message_xp; database[svid][date]["discord warning count"] = snapShot.discord_warning_count; database[svid][date]["district"] = snapShot.district; database[svid][date]["id"] = snapShot.Id; database[svid][date]["image url"] = snapShot.Image_Url; database[svid][date]["minecraft id"] = snapShot.minecraft_id; database[svid][date]["name"] = snapShot.UserName; database[svid][date]["nationstate"] = snapShot.nationstate; database[svid][date]["post likes"] = snapShot.post_likes; database[svid][date]["twitch id"] = snapShot.twitch_id; database[svid][date]["twitch last message minute"] = snapShot.twitch_last_message_minute; database[svid][date]["twitch messages"] = snapShot.twitch_messages; database[svid][date]["twitch message xp"] = snapShot.twitch_message_xp; GetData_Progress.Increment(1); } else if (svid.StartsWith("g-")) { SpookVooper.Api.Entities.Groups.Group g = new SpookVooper.Api.Entities.Groups.Group(svid); GroupSnapshot snapShot = await g.GetSnapshotAsync(); string date = DateTime.Now.ToString("dd-MM-yy"); database[svid] = new Dictionary <string, Dictionary <string, object> >(); database[svid][date] = new Dictionary <string, object>(); database[svid][date]["credits"] = snapShot.Credits; database[svid][date]["credits invested"] = snapShot.Credits_Invested; database[svid][date]["default role id"] = snapShot.Default_Role_Id; database[svid][date]["description"] = snapShot.Description; database[svid][date]["district"] = snapShot.District_Id; database[svid][date]["category"] = snapShot.Group_Category; database[svid][date]["image url"] = snapShot.Image_Url; database[svid][date]["name"] = snapShot.Name; database[svid][date]["id"] = snapShot.Id; database[svid][date]["open"] = snapShot.Open; database[svid][date]["owner id"] = snapShot.Owner_Id; GetData_Progress.Increment(1); } } GetData_Status.Text = "Updating database.json..."; string json = JsonConvert.SerializeObject(database, Formatting.Indented); using (TextWriter tw = new StreamWriter("SVData/database.json")) { tw.Write(json); } GetData_Status.Text = "Completed!"; }
public IHttpActionResult Register(RegisterBindingModel model) { //string strHostPath = ControllerContext.Request.RequestUri.AbsoluteUri.Replace(ControllerContext.Request.RequestUri.AbsolutePath, "/exact/"); string ErrMsg = "Error: "; string SuccessMsg = "Success : User registration done successfully and pending for approval!!"; if (null != model && model.Password.Trim().ToUpper() != model.ConfirmPassword.Trim().ToUpper()) { ErrMsg += string.Join(";", "Password and Confirmation password doesn't match !!"); return(Ok(ErrMsg)); } if (!ModelState.IsValid) { ErrMsg += string.Join("; ", ModelState.Values .SelectMany(x => x.Errors) .Select(x => x.ErrorMessage)); return(Ok(ErrMsg)); } var now = DateTime.Now; var user = new UserSnapshot() { UserName = model.UserName, Email = model.Email, Name = model.Name, Gender = model.Gender, PhoneNumber = model.Phone, Age = model.Age, Password = model.Password, IsActive = true, IsOwner = model.IsOwner, CreatedBy = 1, CreatedOn = now, LastUpdatedBy = 1, LastUpdatedOn = now }; try { Expression <Func <UserSnapshot, bool> > expr1 = s => s.UserName == user.UserName && s.Password == user.Password && s.IsActive == true; //Checking if existing user bool IsUserExists = _UserRepo.GetFilteredUserDetails(expr1).Count() > 0; if (IsUserExists) { ErrMsg += string.Join(";", "User already exists !!"); return(Ok(ErrMsg)); } else { bool res = _UserRepo.AddUser(user, true); //send cofirmation email if (res) { return(Ok(SuccessMsg)); } else { ErrMsg += string.Join(";", "Some error occurred. Please contact administrator !!"); return(Ok(ErrMsg)); } } } catch (Exception ex) { ErrMsg += string.Join(";", ex.Message); return(Ok(ErrMsg)); } }