private async Task BuildeUserLinkList() { using (await _overlapLock.LockAsync()) { UserLinks.Clear(); foreach (ulong discordUserId in DLStorage.WorldData.PlayerTrackedTrades.Keys) { LinkedUser dlUser = LinkedUserManager.LinkedUserByDiscordId(discordUserId); if (dlUser == null) { continue; } DiscordGuild guild = DiscordLink.Obj.GuildByNameOrId(dlUser.GuildId); if (guild == null) { continue; } DiscordMember member = await guild.GetMemberAsync(discordUserId); if (member != null) { UserLinks.Add(new UserLink(member)); } } } }
public Task <Result> JoinRequest(CreateLinkedUserModel model) => Result.TryAsync(async() => { var firstUser = (await _repository.FirstOrDefaultAsync <User>(u => u.Id == model.FirstUserId)) .Data; if (firstUser == null) { return(Result.Failed(Error.WithCode(ErrorCodes.NotFound))); } var secondUser = (await _repository.FirstOrDefaultAsync <User>(u => u.Id == generalDataService.User.Id)) .Data; if (secondUser == null) { return(Result.Failed(Error.WithCode(ErrorCodes.NotFound))); } var linkedUser = new LinkedUser { Id = Guid.NewGuid(), CreationDate = DateTime.Now, FirstUser = firstUser, SecondUser = secondUser, RelationType = model.RelationType, LinkStatus = (byte)LinkStatus.Pending }; _repository.Add(linkedUser); await _repository.CommitAsync(); return(Result.Successful()); });
public async Task Seed() { //_ctx.Database.EnsureCreated(); var user = await _userManager.FindByEmailAsync("*****@*****.**"); if (user == null) { user = new LinkedUser() { FirstName = "Viktor", LastName = "Berglind", UserName = "******", Email = "*****@*****.**" }; var result = await _userManager.CreateAsync(user, "P@ssw0rd!"); if (result != IdentityResult.Success) { throw new InvalidOperationException("Failed to create default user"); } } _ctx.SaveChanges(); }
private void HandleLinkedUserRemoved(object sender, LinkedUser user) { using (_overlapLock.Lock()) { int removeIndex = UserLinks.FindIndex(u => (u as UserLink).Member.Id == ulong.Parse(user.DiscordId)); if (removeIndex >= 0) { UserLinks.RemoveAt(removeIndex); } } }
public Task <Result <Guid> > Add(CreateLinkedUserModel model) => Result <Guid> .TryAsync(async() => { var LinkedUser = new LinkedUser { Id = Guid.NewGuid(), FirstUserId = model.FirstUserId ?? generalDataService.User.Id, SecondUserId = model.SecondUserId, CreationDate = DateTime.Now, LinkStatus = (byte)LinkStatus.Pending }; _repository.Add(LinkedUser); await _repository.CommitAsync(); return(Result <Guid> .Successful(LinkedUser.Id)); });
public static bool CheckIfOwner(LinkedMessage e) { LinkedServer server = e.server; LinkedUser user = e.author; if (user.isIrc) { LinkedIrcUser ircUser = (LinkedIrcUser)user; if (ircUser.IrcUser.Match(Program.Config.servers[server.name].botOwnerHostmask)) { return(true); } } else if (user.isDiscord) { if (user.id.Equals(Program.Config.DiscordBotOwnerID.ToString())) { return(true); } } return(false); }
public static bool CheckPermission(string commandName, LinkedMessage e) { LinkedServer server = e.server; LinkedChannel channel = e.channel; LinkedUser user = e.author; if (CheckIfOwner(e)) { return(true); // If user is the Bot owner, bypass all permission checks } ICommand command = Program.CommandList[commandName]; // Get required permission level PermissionLevel permission = (PermissionLevel)Attribute.GetCustomAttribute(command.GetType(), typeof(PermissionLevel)); if (permission == null) { Logger.Warn("Command \"{0}\" does not have a valid permission set on the class", commandName); } if (Program.Permissions.TryGetValue(server.name, out Dictionary <string, Dictionary <string, PermissionLevel> > channels)) { string check = channel == null ? "PM" : channel.name; if (channels.TryGetValue(check, out Dictionary <string, PermissionLevel> commands)) { commands.TryGetValue(commandName, out permission); } } // Check permissions if (permission == null) { Logger.Warn("Disallowing use of command \"{0}\" because no permission is set", commandName); return(false); // Prevent accidentally allowing dangerous commands to be ran by normal users } if (permission.minLevel == Modes.BotOwner) { return(false); } if (user.isIrc) { if (permission.minLevel == Modes.None) { return(true); } if (channel == null) { return(false); } LinkedIrcChannel ircChannel = (LinkedIrcChannel)channel; LinkedIrcUser ircUser = (LinkedIrcUser)user; return(ircChannel.channel.UsersByMode[IrcUtils.GetUserLevelChar(permission.minLevel)].Contains(ircUser)); } if (user.isDiscord) { if (permission.requiredPermission == Permissions.None) { return(true); } LinkedDiscordUser discordUser = (LinkedDiscordUser)user; if (channel == null) { return(false); } LinkedDiscordChannel discordChannel = (LinkedDiscordChannel)channel; return(discordUser.DiscordMember.PermissionsIn(discordChannel).HasFlag(permission.requiredPermission)); } return(false); }
public Task <Result <object> > Register(AdvanceRegisterModel model) => Result <object> .TryAsync(async() => { model.User.Password = _cryptoService.ComputeSha512Hash(model.User.Password); var username = model.User.Firstname.ToCharArray()[0] + "." + model.User.Lastname; var duplicateUsername = await _repository.FirstOrDefaultAsNoTrackingAsync <User>(u => u.Username == username); if (duplicateUsername.Success && duplicateUsername.Data != null) { username = model.User.Firstname + "." + model.User.Lastname; } duplicateUsername = await _repository.FirstOrDefaultAsNoTrackingAsync <User>(u => u.Username == username); if (duplicateUsername.Success && duplicateUsername.Data != null) { username = model.User.Firstname + "." + model.User.Lastname + new Random(1000).Next(); } var duplicateMobile = await _repository.FirstOrDefaultAsNoTrackingAsync <User>(u => u.Mobile == model.User.Mobile); if (duplicateMobile.Success && duplicateMobile.Data != null) { return(Result <object> .Failed(Error.WithData(1000, new[] { "Duplicate Mobile Number " }))); } var duplicateEmail = await _repository.FirstOrDefaultAsNoTrackingAsync <User>(u => u.Email == model.User.Email); if (duplicateEmail.Success && duplicateEmail.Data != null) { return(Result <object> .Failed(Error.WithData(1000, new[] { "Duplicate Email Address " }))); } var result = await _repository.FirstOrDefaultAsync <Role>(r => r.Name == "NormalUser", r => r.RoleFeature.Select(rf => rf.Feature.FeaturePermission.Select(fp => fp.Permission))); var role = result.Data; var id = Guid.NewGuid(); var user = new User { Id = id, Address = model.User.Address, City = model.User.City, Province = model.User.Province, CreationDate = DateTime.Now, DateOfBirth = model.User.DateOfBirth ?? DateTime.Now, Email = model.User.Email, Enabled = true, SinNumber = model.User.SinNumber, Firstname = model.User.Firstname, Password = _cryptoService.ComputeSha512Hash("" + model.User.DateOfBirth.Value.Year), PostalCode = model.User.PostalCode, Lastname = model.User.Lastname, Latitude = model.User.Latitude, PoBox = model.User.PoBox, Gender = model.User.Gender, Longtitude = model.User.Longtitude, AvatarId = model.User.AvatarId, Receipt = model.User.Receipts != null && model.User.Receipts.Any() ? model.User.Receipts.Select(r => new Receipt { BlobId = r, UserId = id, Id = Guid.NewGuid() }) .ToList() : null, Mobile = model.User.Mobile, Role = role, Username = username, MaritalStatus = (byte)MaritalStatus.Single, }; var linkUser = new LinkedUser { Id = Guid.NewGuid(), FirstUserId = user.Id, SecondUserId = generalDataService.User.Id, CreationDate = DateTime.Now, RelationType = model.RelationType, LinkStatus = (byte)LinkStatus.Pending }; _repository.Add(user); _repository.Add(linkUser); await _repository.CommitAsync(); return(Result <object> .Successful(user.Id)); });
public IHttpActionResult GetLinkedUsersById([FromBody] object data) { ArrayList linkedUsers = new ArrayList(); LinkedUser lu; try { var headers = Request.Headers; string id = headers.GetValues(Models.User.COL_ID).First(); using (SqlConnection con = new SqlConnection(QueryGenerator.ConnectionString())) { con.Open(); using (SqlCommand cmd = con.CreateCommand()) { // query linked user list ArrayList columsS1 = new ArrayList(); ArrayList conditionsS1 = new ArrayList(); string statement1 = string.Empty; columsS1.Add(LinkedUser.COL_ID); columsS1.Add(LinkedUser.COL_USERID1); columsS1.Add(LinkedUser.COL_USERID2); columsS1.Add(LinkedUser.COL_ALERT1); columsS1.Add(LinkedUser.COL_ALERT2); columsS1.Add(LinkedUser.COL_MUTE1); columsS1.Add(LinkedUser.COL_MUTE2); columsS1.Add(LinkedUser.COL_DELETED); columsS1.Add(LinkedUser.COL_ADDED1); columsS1.Add(LinkedUser.COL_ADDED2); conditionsS1.Add(LinkedUser.COL_USERID1 + "=" + id); conditionsS1.Add(QueryGenerator.KW_OR); conditionsS1.Add(LinkedUser.COL_USERID2 + "=" + id); statement1 = QueryGenerator.GenerateSqlSelect(columsS1, LinkedUser.TABLE, conditionsS1); cmd.CommandType = CommandType.Text; cmd.CommandText = statement1; using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { lu = new LinkedUser(); int i = 0; lu.ID = dr.GetInt32(i); i++; lu.UserIDMe = dr.GetInt32(i); if (lu.UserIDMe == int.Parse(id)) { lu.UserIDMe = dr.GetInt32(i); i++; lu.UserIDTarget = dr.GetInt32(i); i++; lu.AlertMe = dr.GetBoolean(i); i++; lu.AlertTarget = dr.GetBoolean(i); i++; lu.MuteMe = dr.GetBoolean(i); i++; lu.MuteTarget = dr.GetBoolean(i); i++; lu.Deleted = dr.GetBoolean(i); i++; lu.AddedMe = dr.GetBoolean(i); i++; lu.AddedTarget = dr.GetBoolean(i); } else { lu.UserIDTarget = dr.GetInt32(i); i++; lu.UserIDMe = dr.GetInt32(i); i++; lu.AlertTarget = dr.GetBoolean(i); i++; lu.AlertMe = dr.GetBoolean(i); i++; lu.MuteTarget = dr.GetBoolean(i); i++; lu.MuteMe = dr.GetBoolean(i); i++; lu.Deleted = dr.GetBoolean(i); i++; lu.AddedTarget = dr.GetBoolean(i); i++; lu.AddedMe = dr.GetBoolean(i); } linkedUsers.Add(lu); } dr.Close(); } linkedUsers.Sort(); // query linked user name and status ArrayList columsS2 = new ArrayList(); ArrayList conditionsS2 = new ArrayList(); ArrayList ordersS2 = new ArrayList(); string statement2 = string.Empty; columsS2.Add(Models.User.COL_ID); columsS2.Add(Models.User.COL_DELETED); columsS2.Add(Models.User.COL_USERNAME); columsS2.Add(Models.User.COL_STATUS); for (int i = 0; i < linkedUsers.Count; ++i) { if (i > 0) { conditionsS2.Add(QueryGenerator.KW_OR); } conditionsS2.Add(Models.User.COL_ID + "=" + ((LinkedUser)linkedUsers[i]).UserIDTarget); } ordersS2.Add(Models.User.COL_ID); statement2 = QueryGenerator.GenerateSqlSelect(columsS2, Models.User.TABLE, conditionsS2, ordersS2, QueryGenerator.KW_ASC); cmd.CommandType = CommandType.Text; cmd.CommandText = statement2; using (SqlDataReader dr = cmd.ExecuteReader()) { int i = 0; if (linkedUsers.Count > 0) { while (dr.Read()) { if (((LinkedUser)linkedUsers[i]).UserIDTarget == dr.GetInt32(0) && !dr.GetBoolean(1)) { ((LinkedUser)linkedUsers[i]).NameTarget = dr.GetString(2); ((LinkedUser)linkedUsers[i]).StatusTarget = dr.GetInt32(3); } else { ((LinkedUser)linkedUsers[i]).NameTarget = string.Empty; ((LinkedUser)linkedUsers[i]).StatusTarget = 5; } i++; } } dr.Close(); } for (int i = linkedUsers.Count - 1; i >= 0; --i) { if (((LinkedUser)linkedUsers[i]).NameTarget.Length == 0) { linkedUsers.RemoveAt(i); } } } con.Close(); } } catch (Exception e) { return(ResponseMessage(JsonContent.ReturnMessage("The request is invalid.", e.ToString()))); } return(Ok(new { linkedUsers })); }
public override async Task respond(string message, LinkedUser user = null) { await DiscordMember.SendMessageAsync(message); }
public IHttpActionResult Alert([FromBody] object data) { LinkedUser lu; ArrayList linkedUsers = new ArrayList(); ArrayList emailsToAlert = new ArrayList(); string userName = string.Empty; try { var headers = Request.Headers; string id = headers.GetValues(Models.User.COL_ID).First(); string lat = headers.GetValues(Location.COL_LAT).First(); string lng = headers.GetValues(Location.COL_LNG).First(); using (SqlConnection con = new SqlConnection(QueryGenerator.ConnectionString())) { con.Open(); using (SqlCommand cmd = con.CreateCommand()) { // Set flag for user table --------------------- ArrayList assignmentsS1 = new ArrayList(); ArrayList conditionsS1 = new ArrayList(); string statement1; assignmentsS1.Add(Models.User.COL_STATUS + "=6"); conditionsS1.Add(Models.User.COL_ID + "=" + id); statement1 = QueryGenerator.GenerateSqlUpdate(Models.User.TABLE, assignmentsS1, conditionsS1); cmd.CommandType = CommandType.Text; cmd.CommandText = statement1.ToString(); cmd.ExecuteNonQuery(); // Set location for location table ------------- ArrayList valuesS2 = new ArrayList(); ArrayList assignmentsS2 = new ArrayList(); string statement2 = string.Empty; valuesS2.Add(id); valuesS2.Add(lat); valuesS2.Add(lng); valuesS2.Add(QueryGenerator.QuoteString(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"))); statement2 = QueryGenerator.GenerateSqlInsert(valuesS2, Location.TABLE); cmd.CommandType = CommandType.Text; cmd.CommandText = statement2; cmd.ExecuteNonQuery(); // Get linked users ---------------------------- ArrayList columsS3 = new ArrayList(); ArrayList conditionsS3 = new ArrayList(); string statement3 = string.Empty; columsS3.Add(LinkedUser.COL_ID); columsS3.Add(LinkedUser.COL_USERID1); columsS3.Add(LinkedUser.COL_USERID2); columsS3.Add(LinkedUser.COL_ALERT1); columsS3.Add(LinkedUser.COL_ALERT2); columsS3.Add(LinkedUser.COL_MUTE1); columsS3.Add(LinkedUser.COL_MUTE2); columsS3.Add(LinkedUser.COL_DELETED); columsS3.Add(LinkedUser.COL_ADDED1); columsS3.Add(LinkedUser.COL_ADDED2); conditionsS3.Add(LinkedUser.COL_USERID1 + "=" + id); conditionsS3.Add(QueryGenerator.KW_OR); conditionsS3.Add(LinkedUser.COL_USERID2 + "=" + id); statement3 = QueryGenerator.GenerateSqlSelect(columsS3, LinkedUser.TABLE, conditionsS3); cmd.CommandType = CommandType.Text; cmd.CommandText = statement3; using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { lu = new LinkedUser(); int i = 0; lu.ID = dr.GetInt32(i); i++; lu.UserIDMe = dr.GetInt32(i); if (lu.UserIDMe == int.Parse(id)) { lu.UserIDMe = dr.GetInt32(i); i++; lu.UserIDTarget = dr.GetInt32(i); i++; lu.AlertMe = dr.GetBoolean(i); i++; lu.AlertTarget = dr.GetBoolean(i); i++; lu.MuteMe = dr.GetBoolean(i); i++; lu.MuteTarget = dr.GetBoolean(i); i++; lu.Deleted = dr.GetBoolean(i); i++; lu.AddedMe = dr.GetBoolean(i); i++; lu.AddedTarget = dr.GetBoolean(i); } else { lu.UserIDTarget = dr.GetInt32(i); i++; lu.UserIDMe = dr.GetInt32(i); i++; lu.AlertTarget = dr.GetBoolean(i); i++; lu.AlertMe = dr.GetBoolean(i); i++; lu.MuteTarget = dr.GetBoolean(i); i++; lu.MuteMe = dr.GetBoolean(i); i++; lu.Deleted = dr.GetBoolean(i); i++; lu.AddedTarget = dr.GetBoolean(i); i++; lu.AddedMe = dr.GetBoolean(i); } linkedUsers.Add(lu); } dr.Close(); } linkedUsers.Sort(); // Filter linked users ------------------------- for (int i = linkedUsers.Count - 1; i >= 0; --i) { LinkedUser linkedUser = (LinkedUser)linkedUsers[i]; if (!(linkedUser.AddedMe && linkedUser.AddedTarget) || !linkedUser.AlertMe || linkedUser.MuteTarget || linkedUser.Deleted) { linkedUsers.RemoveAt(i); } } // Get linked user emails ---------------------- ArrayList columsS4 = new ArrayList(); ArrayList conditionsS4 = new ArrayList(); string statement4 = string.Empty; columsS4.Add(Models.User.COL_DELETED); columsS4.Add(Models.User.COL_EMAIL); for (int i = 0; i < linkedUsers.Count; ++i) { if (i > 0) { conditionsS4.Add(QueryGenerator.KW_OR); } conditionsS4.Add(Models.User.COL_ID + "=" + ((LinkedUser)linkedUsers[i]).UserIDTarget); } statement4 = QueryGenerator.GenerateSqlSelect(columsS4, Models.User.TABLE, conditionsS4); cmd.CommandType = CommandType.Text; cmd.CommandText = statement4; // Set linked user emails ---------------------- using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { if (!dr.GetBoolean(0)) { if (dr.GetValue(1) != DBNull.Value) { emailsToAlert.Add(dr.GetString(1)); } } } dr.Close(); } // Get this user's name ------------------------ ArrayList columsS5 = new ArrayList(); ArrayList conditionsS5 = new ArrayList(); string statement5 = string.Empty; columsS5.Add(Models.User.COL_USERNAME); conditionsS5.Add(Models.User.COL_ID + "=" + id); statement5 = QueryGenerator.GenerateSqlSelect(columsS5, Models.User.TABLE, conditionsS5); cmd.CommandType = CommandType.Text; cmd.CommandText = statement5; using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { userName = dr.GetString(0); } dr.Close(); } } con.Close(); } // Send notification foreach (string email in emailsToAlert) { string message = "[" + userName + "] Help!"; SendNotification(message, email); } } catch (Exception e) { return(ResponseMessage(JsonContent.ReturnMessage("The request is invalid.", e.ToString()))); } if (emailsToAlert.Count == 0) { return(ResponseMessage(JsonContent.ReturnMessage("No linked user is found.", ""))); } //return ResponseMessage(JsonContent.ReturnMessage("Linked users are alerted.", "")); return(Ok(emailsToAlert)); }
private static LinkedUserModel Map(this LinkedUser input) => new LinkedUserModel { Username = input.Username, Reason = input.Reason };