Ejemplo n.º 1
0
        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());
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        protected override Snapshot CreateSnapshot()
        {
            var snapshot = new UserSnapshot
            {
                SourceId = Id,
                Username = Username,
                Password = Password,
                Salt     = Salt,
                Age      = Age,
                Male     = Male
            };

            return(snapshot);
        }
Ejemplo n.º 6
0
        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());
            }
        }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
        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}");
            }
        }
Ejemplo n.º 9
0
        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!";
        }
Ejemplo n.º 10
0
        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));
            }
        }