public static async Task <int> GetUserId(ActionExecutingContext context, BitcornContext dbContext)
        {
            var platformHeaders = LockUserAttributeUtils.GetPlatformHeaders(context);

            switch (platformHeaders.Platform)
            {
            case "auth0":
                return(await dbContext.Auth0Query(platformHeaders.Id).Select(u => u.UserId).FirstOrDefaultAsync());

            case "twitch":
                return(await dbContext.TwitchQuery(platformHeaders.Id).Select(u => u.UserId).FirstOrDefaultAsync());

            case "discord":
                return(await dbContext.DiscordQuery(platformHeaders.Id).Select(u => u.UserId).FirstOrDefaultAsync());

            case "twitter":
                return(await dbContext.TwitterQuery(platformHeaders.Id).Select(u => u.UserId).FirstOrDefaultAsync());

            case "reddit":
                return(await dbContext.RedditQuery(platformHeaders.Id).Select(u => u.UserId).FirstOrDefaultAsync());

            default:
                return(0);
            }
        }
        public static IQueryable <User> GetUserFromHeader(ActionExecutingContext context, BitcornContext dbContext)
        {
            var platformHeaders = LockUserAttributeUtils.GetPlatformHeaders(context);

            switch (platformHeaders.Platform)
            {
            case "auth0":
                return(dbContext.Auth0Query(platformHeaders.Id));

            case "twitch":
                return(dbContext.TwitchQuery(platformHeaders.Id));

            case "discord":
                return(dbContext.DiscordQuery(platformHeaders.Id));

            case "twitter":
                return(dbContext.TwitterQuery(platformHeaders.Id));

            case "reddit":
                return(dbContext.RedditQuery(platformHeaders.Id));

            default:
                return(null);
            }
        }
Esempio n. 3
0
        public static IQueryable <User> GetUserForPlatform(PlatformId platformId, BitcornContext dbContext)
        {
            switch (platformId.Platform)
            {
            case "auth0":
                return(dbContext.Auth0Query(platformId.Id));

            case "twitch":
                return(dbContext.TwitchQuery(platformId.Id));

            case "stream":
                return(dbContext.TwitchQuery(platformId.Id));

            case "twitchusername":
                return(dbContext.TwitchUsernameQuery(platformId.Id));

            case "discord":
                return(dbContext.DiscordQuery(platformId.Id));

            case "twitter":
                return(dbContext.TwitterQuery(platformId.Id));

            case "reddit":
                return(dbContext.RedditQuery(platformId.Id));

            case "userid":
                return(dbContext.UserIdQuery(int.Parse(platformId.Id)));

            default:
                throw new Exception($"User {platformId.Platform}|{platformId.Id} could not be found");
            }
        }
Esempio n. 4
0
        public static async Task <User> ReadUser(IConfiguration config, BitcornContext dbContext, HttpContext context)
        {
            var identity = context.User.Identities.First();
            var claim    = identity.Claims.FirstOrDefault(c => c.Type == config["Config:IdKey"]);

            if (claim == default(Claim))
            {
                return(null);
            }
            var split = claim.Value.Split('@');

            if (split.Length == 1)
            {
                var user = await dbContext.Auth0Query(claim.Value).FirstOrDefaultAsync();

                if (user != null)
                {
                    context.Items.Add("user", user);
                    context.Items.Add("usermode", 0);
                }
                else
                {
                    if (claim.Value.Contains("auth0|"))
                    {
                        try
                        {
                            user = Controllers.RegisterController.CreateUser(new Auth0User()
                            {
                                Auth0Id       = claim.Value,
                                Auth0Nickname = ""
                            }, 0);
                            dbContext.User.Add(user);
                            await dbContext.SaveAsync();

                            context.Items.Add("user", user);
                            context.Items.Add("usermode", 0);
                        }
                        catch (Exception e)
                        {
                            user = null;
                            await BITCORNLogger.LogError(dbContext, e, claim.Value);

                            return(null);
                        }
                    }
                }
                //await BITCORNLogger.LogError(dbContext, new Exception(""),
                //Newtonsoft.Json.JsonConvert.SerializeObject(new { userId = claim.Value, isNull=user==null }));
                return(user);
            }
            else
            {
                return(null);
            }
        }
        public async Task <decimal> ReceiverTotal([FromRoute] string auth0Id)
        {
            if (string.IsNullOrWhiteSpace(auth0Id))
            {
                throw new ArgumentNullException();
            }

            var user = await _dbContext.Auth0Query(auth0Id).FirstOrDefaultAsync();

            return(Convert.ToDecimal(user.UserStat.RainedOnTotal + user.UserStat.TippedTotal));
        }
Esempio n. 6
0
        public async Task <FullUser> RegisterNewUser([FromBody] Auth0User auth0User)
        {
            if (auth0User == null)
            {
                throw new ArgumentNullException();
            }

            var existingUserIdentity = await _dbContext.Auth0Query(auth0User.Auth0Id).Select(u => u.UserIdentity).FirstOrDefaultAsync();

            if (existingUserIdentity?.Auth0Id == auth0User.Auth0Id)
            {
                var user       = _dbContext.User.FirstOrDefault(u => u.UserId == existingUserIdentity.UserId);
                var userWallet = _dbContext.UserWallet.FirstOrDefault(u => u.UserId == existingUserIdentity.UserId);
                var userStat   = _dbContext.UserStat.FirstOrDefault(u => u.UserId == existingUserIdentity.UserId);
                return(BitcornUtils.GetFullUser(user, existingUserIdentity, userWallet, userStat));
            }

            try
            {
                var user = new User
                {
                    UserIdentity = new UserIdentity
                    {
                        Auth0Id = auth0User.Auth0Id, Auth0Nickname = auth0User.Auth0Nickname
                    },
                    UserWallet = new UserWallet(),
                    UserStat   = new UserStat()
                };
                _dbContext.User.Add(user);
                await _dbContext.SaveAsync();

                return(BitcornUtils.GetFullUser(user, user.UserIdentity, user.UserWallet, user.UserStat));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Esempio n. 7
0
        public async Task <bool> Update([FromBody] Auth0IdUsername auth0IdUsername)
        {
            if (_dbContext.User.Any(u => u.Username == auth0IdUsername.Username))
            {
                return(false);
            }
            //join identity with user table to select in 1 query
            var user = await _dbContext.Auth0Query(auth0IdUsername.Auth0Id)
                       .Join(_dbContext.User, identity => identity.UserId, us => us.UserId, (id, u) => u).FirstOrDefaultAsync();

            user.Username = auth0IdUsername.Username;
            await _dbContext.SaveAsync();

            return(true);
        }
Esempio n. 8
0
        public async Task <ActionResult <FullUser> > RegisterNewUser([FromBody] Auth0User auth0User, [FromQuery] string referral = null)
        {
            if (this.GetCachedUser() != null)
            {
                throw new InvalidOperationException();
            }
            if (auth0User == null)
            {
                throw new ArgumentNullException();
            }
            if (!StaticLockCollection.Lock(auth0User.Auth0Id))
            {
                return(StatusCode(UserLockCollection.UserLockedReturnCode));
            }

            var existingUserIdentity = await _dbContext.Auth0Query(auth0User.Auth0Id).Select(u => u.UserIdentity).FirstOrDefaultAsync();

            if (existingUserIdentity?.Auth0Id == auth0User.Auth0Id)
            {
                var user       = _dbContext.User.FirstOrDefault(u => u.UserId == existingUserIdentity.UserId);
                var userWallet = _dbContext.UserWallet.FirstOrDefault(u => u.UserId == existingUserIdentity.UserId);
                var userStat   = _dbContext.UserStat.FirstOrDefault(u => u.UserId == existingUserIdentity.UserId);
                StaticLockCollection.Release(auth0User.Auth0Id);
                return(BitcornUtils.GetFullUser(user, existingUserIdentity, userWallet, userStat));
            }

            int referralId;

            try
            {
                referralId = Convert.ToInt32(referral);
            }
            catch (Exception e)
            {
                referralId = 0;
            }

            try
            {
                var user = CreateUser(auth0User, referralId);
                _dbContext.User.Add(user);
                if (referral != null && referralId != 0)
                {
                    var referrer = await _dbContext.Referrer.FirstOrDefaultAsync(r => r.ReferralId == referralId);

                    if (ReferralUtils.IsValidReferrer(referrer))
                    {
                        var referrerUser = await _dbContext.User.FirstOrDefaultAsync(u => u.UserId == referrer.UserId);

                        if (referrerUser != null && !referrerUser.IsBanned)
                        {
                            var referralPayoutTotal = await ReferralUtils.TotalReward(_dbContext, referrer);

                            var referrerRegistrationReward = await TxUtils.SendFromBitcornhub(referrerUser, referralPayoutTotal, "BITCORNFarms", "Registrations reward", _dbContext);

                            var userRegistrationReward = await TxUtils.SendFromBitcornhub(user, referrer.Amount, "BITCORNFarms", "Recruit registrations reward", _dbContext);

                            if (referrerRegistrationReward && userRegistrationReward)
                            {
                                await ReferralUtils.UpdateYtdTotal(_dbContext, referrer, referralPayoutTotal);

                                await ReferralUtils.LogReferralTx(_dbContext, referrer.UserId, referralPayoutTotal, "Registration reward");

                                await ReferralUtils.LogReferralTx(_dbContext, user.UserId, referrer.Amount, "Recruit registration reward");

                                var referrerStat = await _dbContext.UserStat.FirstOrDefaultAsync(s => s.UserId == referrer.UserId);

                                if (referrerStat != null)
                                {
                                    if (referrerStat.TotalReferrals == null)
                                    {
                                        referrerStat.TotalReferrals = 0;
                                    }
                                    referrerStat.TotalReferrals++;

                                    if (referrerStat.TotalReferralRewardsCorn == null)
                                    {
                                        referrerStat.TotalReferralRewardsCorn = 0;
                                    }
                                    referrerStat.TotalReferralRewardsCorn += referralPayoutTotal;

                                    if (referrerStat.TotalReferralRewardsUsdt == null)
                                    {
                                        referrerStat.TotalReferralRewardsUsdt = 0;
                                    }
                                    referrerStat.TotalReferralRewardsUsdt += (referralPayoutTotal * (await ProbitApi.GetCornPriceAsync(_dbContext)));
                                }
                                user.UserReferral.SignupReward = DateTime.Now;
                            }
                        }
                    }
                }

                await _dbContext.SaveAsync();

                return(BitcornUtils.GetFullUser(user, user.UserIdentity, user.UserWallet, user.UserStat));
            }
            catch (Exception e)
            {
                await BITCORNLogger.LogError(_dbContext, e, JsonConvert.SerializeObject(auth0User));

                throw e;
            }
            finally
            {
                StaticLockCollection.Release(auth0User.Auth0Id);
            }
        }