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); }
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); }
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(); }
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); }
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); }
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); }
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"); } } }
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())); } }