public GuildMember AddGuildMember(Guid guildId, ClassicGuildBankUser classicGuildBankUser, bool save = true)
        {
            var member = _classicGuildBankDbContext.GuildMembers.FirstOrDefault(m => m.GuildId == guildId && m.UserId == classicGuildBankUser.Id);

            if (member != null)
            {
                return(member);
            }

            member = new GuildMember()
            {
                GuildId     = guildId,
                UserId      = classicGuildBankUser.Id,
                DisplayName = classicGuildBankUser.UserName
            };

            _classicGuildBankDbContext.GuildMembers.Add(member);

            if (save)
            {
                _classicGuildBankDbContext.SaveChanges();
            }

            return(member);
        }
Esempio n. 2
0
        public async Task <string> GetPatreonId(ClassicGuildBankUser user)
        {
            _http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", user.PatreonAccessToken);
            var userResponse = await _http.GetAsync("https://www.patreon.com/api/oauth2/v2/identity");

            if (!userResponse.IsSuccessStatusCode)
            {
                throw new HttpRequestException(await userResponse.Content.ReadAsStringAsync());
            }

            var userObj = JsonConvert.DeserializeObject <JObject>(await userResponse.Content.ReadAsStringAsync());

            if (userObj == null)
            {
                throw new InvalidOperationException("User Object is null");
            }

            var userData = userObj["data"];

            if (userData == null)
            {
                throw new InvalidOperationException("User Data is null");
            }

            return(userData["id"].ToString());
        }
        private object GenerateJwtToken(ClassicGuildBankUser user)
        {
            var claims = new List <Claim>
            {
                new Claim(JwtRegisteredClaimNames.Sub, user.Id),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(JwtRegisteredClaimNames.Email, user.Email ?? String.Empty),
                new Claim(ClaimTypes.Name, user.UserName)
            };

            var key     = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtKey"]));
            var creds   = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            var expires = DateTime.Now.AddDays(Convert.ToDouble(_configuration["JwtExpireDays"]));

            var token = new JwtSecurityToken(
                _configuration["JwtIssuer"],
                _configuration["JwtIssuer"],
                claims,
                expires: expires,
                signingCredentials: creds
                );

            return(new
            {
                token = new JwtSecurityTokenHandler().WriteToken(token),
                expiration = token.ValidTo,
                user = user.UserName
            });
        }
        public ItemRequest AddItemRequest(RequestItemsModel requestItemsModel, ClassicGuildBankUser classicGuildBankUser)
        {
            var request = new ItemRequest()
            {
                Id            = Guid.NewGuid(),
                CharacterName = requestItemsModel.CharacterName,
                Gold          = requestItemsModel.Gold,
                GuildId       = requestItemsModel.GuildId,
                UserId        = classicGuildBankUser.Id,
                Status        = RequestStatus.Pending,
                DateRequested = DateTime.Now
            };

            _classicGuildBankDbContext.ItemRequests.Add(request);

            foreach (var item in requestItemsModel.RequestItemModels)
            {
                var detail = new ItemRequestDetail()
                {
                    Id            = Guid.NewGuid(),
                    ItemId        = item.ItemId,
                    Quantity      = item.Quantity,
                    ItemRequestId = request.Id
                };

                _classicGuildBankDbContext.ItemRequestDetails.Add(detail);
            }

            _classicGuildBankDbContext.SaveChanges();

            return(request);
        }
        public void RenameGuild(RenameGuildModel renameGuildModel, ClassicGuildBankUser classicGuildBankUser)
        {
            var guild = GetGuildForOwner(renameGuildModel.GuildId, classicGuildBankUser);

            guild.Name = renameGuildModel.GuildName;

            _classicGuildBankDbContext.SaveChanges();
        }
        public void DeleteGuild(Guid guildId, ClassicGuildBankUser classicGuildBankUser)
        {
            var guild = GetGuildForOwner(guildId, classicGuildBankUser);

            _classicGuildBankDbContext.Guilds.Remove(guild);

            _classicGuildBankDbContext.SaveChanges();
        }
        public void DenyItemRequest(Guid itemRequestId, Guid guildId, ClassicGuildBankUser classicGuildBankUser)
        {
            if (!UserCanProcessItemRequests(guildId, classicGuildBankUser.Id))
            {
                throw new UserCannotProcessItemRequestsException();
            }

            UpdateItemRequestStatus(itemRequestId, RequestStatus.Denied);
        }
        public void ApproveItemRequest(Guid itemRequestId, Guid guildId, ClassicGuildBankUser classicGuildBankUser)
        {
            if (!UserCanProcessItemRequests(guildId, classicGuildBankUser.Id))
            {
                throw new UserCannotProcessItemRequestsException();
            }

            UpdateItemRequestStatus(itemRequestId, RequestStatus.Approved, onUpdateStatusAction: CreateWithdrawalTransaction);
        }
Esempio n. 9
0
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (User.Identity.Name != null)
            {
                _classicGuildBankUser = _userManager.FindByNameAsync(User.Identity.Name).Result;
            }

            base.OnActionExecuting(context);
        }
        public void DeleteCharacter(Guid guildId, Guid characterId, ClassicGuildBankUser classicGuildBankUser)
        {
            var guild = GetGuildForOwner(guildId, classicGuildBankUser);

            var character = _classicGuildBankDbContext.Characters.FirstOrDefault(c => c.GuildId == guildId && c.Id == characterId);

            _classicGuildBankDbContext.Characters.Remove(character);

            _classicGuildBankDbContext.SaveChanges();
        }
Esempio n. 11
0
        private async Task <string> GetPasswordResetEmailMessageHtml(ClassicGuildBankUser user, string code)
        {
            var url   = $"{ _configuration.GetSection("ClientUrl").Value}/user/reset";
            var model = new ConfirmEmailViewModel()
            {
                Username = user.UserName, Code = code, CallbackUrl = url
            };

            return(await _razorService.RenderView("ResetPasswordEmailView", model));
        }
        private Guild GetGuildForOwner(Guid guildId, ClassicGuildBankUser classicGuildBankUser)
        {
            var guild = GetGuild(guildId);

            if (guild.UserId != classicGuildBankUser.Id)
            {
                throw new ApplicationException("User is not the owner of this guild.");
            }

            return(guild);
        }
        public GuildMember AddGuildMember(string inviteToken, ClassicGuildBankUser classicGuildBankUser)
        {
            var guild = GetGuildFromToken(inviteToken);

            if (guild == null)
            {
                return(null);
            }

            return(AddGuildMember(guild.Id, classicGuildBankUser));
        }
        public Guild UpdateGuildInviteLink(Guid guildId, ClassicGuildBankUser classicGuildBankUser)
        {
            var guild = GetGuildForOwner(guildId, classicGuildBankUser);

            _classicGuildBankDbContext.Attach(guild);

            guild.InviteUrl = GenerateGuildInviteUrl();

            _classicGuildBankDbContext.SaveChanges();

            return(guild);
        }
        public Guild UpdateGuildPublicLink(Guid guildId, ClassicGuildBankUser classicGuildBankUser, bool linkEnabled)
        {
            var guild = GetGuildForOwner(guildId, classicGuildBankUser);

            _classicGuildBankDbContext.Attach(guild);

            guild.PublicLinkEnabled = linkEnabled;
            guild.PublicUrl         = linkEnabled ? GenerateGuildPublicUrl() : String.Empty;

            _classicGuildBankDbContext.SaveChanges();

            return(guild);
        }
Esempio n. 16
0
        public void SendPasswordResetEmail(ClassicGuildBankUser user, string code)
        {
            var client = new SendGridClient(_apiKey);
            var msg    = new SendGridMessage()
            {
                From        = new EmailAddress("*****@*****.**", "Classic Guild Bank"),
                Subject     = "Password Reset",
                HtmlContent = GetPasswordResetEmailMessageHtml(user, code).Result,
            };

            msg.AddTo(user.Email);
            client.SendEmailAsync(msg);
        }
 private CharacterImporter
 (
     GuildBankRepository guildBankRepository,
     ClassicGuildBankUser classicGuildBankUser,
     Guid guildId,
     CharacterImportModel characterImportModel
 )
 {
     _guildBankRepository  = guildBankRepository;
     _classicGuildBankUser = classicGuildBankUser;
     _guildId = guildId;
     _characterImportModel = characterImportModel;
 }
        public IEnumerable <GuildMemberViewModel> GetGuildMembers(Guid guildId, ClassicGuildBankUser classicGuildBankUser)
        {
            var members = _classicGuildBankDbContext.GuildMembers
                          .Include(m => m.Guild)
                          .Where(m => m.GuildId == guildId)
                          .Select(m => new GuildMemberViewModel
            {
                UserId      = m.UserId,
                GuildId     = m.GuildId,
                DisplayName = m.DisplayName,
                CanUpload   = m.Guild.UserId == m.UserId || m.CanUpload
            });

            return(members);
        }
 public IEnumerable <Character> GetCharacters(Guid guildId, ClassicGuildBankUser classicGuildBankUser)
 {
     return(_classicGuildBankDbContext.Guilds
            .Include(guild => guild.GuildMembers)
            .Include(guild => guild.Characters)
            .ThenInclude(character => character.Bags)
            .ThenInclude(bag => bag.BagSlots)
            .ThenInclude(bagSlot => bagSlot.Item)
            .Include(guild => guild.Characters)
            .ThenInclude(character => character.Bags)
            .ThenInclude(bag => bag.BagItem)
            .Where(guild => guild.Id == guildId && guild.GuildMembers.Any(gm => gm.UserId == classicGuildBankUser.Id))
            .SingleOrDefault()
            .Characters);
 }
Esempio n. 20
0
        public async Task <IdentityResult> UpdateUserToken(PatreonToken token, ClassicGuildBankUser user)
        {
            user.PatreonAccessToken  = token.AccessToken;
            user.PatreonExpiration   = token.ExpiresIn;
            user.PatreonRefreshToken = token.RefreshToken;
            user.LastUpdated         = DateTime.Now;

            if (String.IsNullOrEmpty(user.Patreon_Id))
            {
                var patreonId = await GetPatreonId(user);

                user.Patreon_Id = patreonId;
            }

            return(await _userManager.UpdateAsync(user));
        }
        public void AddGuildTransactions(Guid guildId, ClassicGuildBankUser user, List <ItemDepositImportModel> deposits)
        {
            if (!UserCanUpload(guildId, user.Id))
            {
                throw new UserCannotUploadException();
            }

            var depositGroups = deposits.GroupBy(deposit => deposit.CharacterName);

            foreach (var depositGroup in depositGroups)
            {
                CreateDepositTransaction(guildId, depositGroup);
            }

            _classicGuildBankDbContext.SaveChanges();
        }
        public static void ImportCharacter
        (
            GuildBankRepository guildBankRepository,
            ClassicGuildBankUser classicGuildBankUser,
            Guid guildId,
            string encodedImportString
        )
        {
            var characterImportModel = new CharacterImportModel(encodedImportString);

            new CharacterImporter
            (
                guildBankRepository,
                classicGuildBankUser,
                guildId,
                characterImportModel
            ).ImportCharacter();
        }
        public void UpdateGuildCharacter(Character character, Guid guildId, ClassicGuildBankUser classicGuildBankUser)
        {
            if (!UserCanUpload(guildId, classicGuildBankUser.Id))
            {
                throw new UserCannotUploadException();
            }

            var existingCharacter = _classicGuildBankDbContext.Characters.FirstOrDefault(c => c.GuildId == guildId && c.Name == character.Name);

            if (existingCharacter != null)
            {
                _classicGuildBankDbContext.Characters.Remove(existingCharacter);
            }

            _classicGuildBankDbContext.Characters.Add(character);

            _classicGuildBankDbContext.SaveChanges();
        }
        public void RemoveSelfFromGuild(Guid guildId, ClassicGuildBankUser classicGuildBankUser)
        {
            var guild = GetGuild(guildId);

            if (guild.UserId == classicGuildBankUser.Id)
            {
                throw new CannotRemoveOwnerFromGuildException();
            }

            var guildMember = _classicGuildBankDbContext.GuildMembers.FirstOrDefault(gm => gm.GuildId == guildId && gm.UserId == classicGuildBankUser.Id);

            if (guildMember == null)
            {
                throw new ApplicationException("Unable to locate guild member");
            }

            _classicGuildBankDbContext.GuildMembers.Remove(guildMember);

            _classicGuildBankDbContext.SaveChanges();
        }
        public void ToggleUploadAccess(Guid guildId, string userId, ClassicGuildBankUser classicGuildBankUser)
        {
            var guild = GetGuildForOwner(guildId, classicGuildBankUser);

            if (guild.UserId == userId)
            {
                throw new CannotRemoveOwnerFromGuildException();
            }

            var guildMember = _classicGuildBankDbContext.GuildMembers.FirstOrDefault(gm => gm.GuildId == guildId && gm.UserId == userId);

            if (guildMember == null)
            {
                throw new ApplicationException("Unable to locate guild member");
            }

            guildMember.CanUpload = !guildMember.CanUpload;

            _classicGuildBankDbContext.SaveChanges();
        }
        public IEnumerable <Guild> GetGuilds(ClassicGuildBankUser classicGuildBankUser)
        {
            var guilds = _classicGuildBankDbContext.Guilds
                         .Include(guild => guild.GuildMembers)
                         .Where(guild => guild.UserId == classicGuildBankUser.Id || guild.GuildMembers.Any(member => member.UserId == classicGuildBankUser.Id));

            foreach (var guild in guilds)
            {
                guild.UserIsOwner   = guild.UserId == classicGuildBankUser.Id;
                guild.IsSelected    = guild.IsSelected = classicGuildBankUser.LastSelectedGuildId == guild.Id;
                guild.UserCanUpload = guild.UserIsOwner || guild.GuildMembers.Any(member => member.UserId == classicGuildBankUser.Id && member.CanUpload);
            }

            if (guilds.Any() && !guilds.Any(guild => guild.IsSelected))
            {
                guilds.First().IsSelected = true;
            }

            return(guilds);
        }
 public IEnumerable <ItemRequestViewModel> GetMyItemRequests(Guid guildId, ClassicGuildBankUser classicGuildBankUser)
 {
     return(_classicGuildBankDbContext.ItemRequests
            .Include(i => i.Details)
            .ThenInclude(i => i.Item)
            .Where(i => i.GuildId == guildId && i.UserId == classicGuildBankUser.Id)
            .Select(itemRequest => new ItemRequestViewModel
     {
         Id = itemRequest.Id,
         CharacterName = itemRequest.CharacterName,
         DateRequested = itemRequest.DateRequested,
         Gold = itemRequest.Gold,
         Reason = itemRequest.Reason,
         Status = itemRequest.Status,
         ItemRequestDetails = itemRequest.Details.Select(itemRequesttDetail => new ItemRequestDetailViewModel()
         {
             Item = itemRequesttDetail.Item,
             Quantity = itemRequesttDetail.Quantity
         }).ToList()
     }));
 }
        public Guild AddGuild(AddGuildModel addGuildModel, ClassicGuildBankUser classicGuildBankUser)
        {
            var guild = new Guild()
            {
                Id        = Guid.NewGuid(),
                UserId    = classicGuildBankUser.Id,
                Name      = addGuildModel.GuildName,
                InviteUrl = GenerateGuildInviteUrl()
            };

            _classicGuildBankDbContext.Guilds.Add(guild);

            AddGuildMember(guild.Id, classicGuildBankUser, save: false);

            _classicGuildBankDbContext.SaveChanges();

            guild.UserIsOwner   = true;
            guild.UserCanUpload = true;

            return(guild);
        }
Esempio n. 29
0
        private async Task SeedUsers()
        {
            var user = await _userManager.FindByNameAsync("Skorppio");

            if (user == null)
            {
                user = new ClassicGuildBankUser()
                {
                    UserName = "******",
                    Email    = "*****@*****.**"
                };

                var result = await _userManager.CreateAsync(user, "P@ssw0rd!");

                if (result != IdentityResult.Success)
                {
                    throw new InvalidOperationException("Failed to create default user");
                }
            }

            user = await _userManager.FindByNameAsync("Rumjugs");

            if (user == null)
            {
                user = new ClassicGuildBankUser()
                {
                    UserName = "******",
                    Email    = "*****@*****.**"
                };

                var result = await _userManager.CreateAsync(user, "P@ssw0rd!");

                if (result != IdentityResult.Success)
                {
                    throw new InvalidOperationException("Failed to create default user");
                }
            }
        }
Esempio n. 30
0
        public async Task <PatreonToken> RefreshToken(ClassicGuildBankUser user)
        {
            var dictionary = new Dictionary <string, string>();

            dictionary.Add("grant_type", "refresh_token");
            dictionary.Add("refresh_token", user.PatreonRefreshToken);
            dictionary.Add("client_id", _config.GetSection("Patreon").GetSection("client_id").Value);
            dictionary.Add("client_secret", _config.GetSection("Patreon").GetSection("client_secret").Value);


            var content  = new FormUrlEncodedContent(dictionary);
            var response = await _http.PostAsync("https://www.patreon.com/api/oauth2/token", content);

            if (!response.IsSuccessStatusCode)
            {
                return new PatreonToken {
                           ErrorMessage = await response.Content.ReadAsStringAsync(), StatusCode = (int)response.StatusCode
                }
            }
            ;

            return(JsonConvert.DeserializeObject <PatreonToken>(await response.Content.ReadAsStringAsync()));
        }
    }