/// <summary> /// Create and save a new Token /// </summary> /// <param name="user"></param> /// <param name="entities"></param> /// <returns></returns> private static long CreateToken(User user, ircbotEntities entities) { var token = new Token { FKUserID = user.UserID, IP = "ip", Started = DateTime.UtcNow, Token1 = Utils.Get32ByteUID() }; entities .Tokens .Add(token); entities .SaveChanges(); return token.TokenID; }
/// <summary> /// Return any active token for this UserID. If none, create a new one. /// </summary> /// <param name="user"></param> /// <returns></returns> public Token GetOrCreateToken(User user) { var token = _context .Tokens .Where(t => t.FKUserID == user.UserID && t.Ended == null) .OrderBy(t => t.TokenID) .FirstOrDefault(); if (token != null) return token; // Create a new one and get the ID long tokenID = Repository.CreateToken(user, new ircbotEntities()); return _context .Tokens .Where(t => t.TokenID == tokenID) .FirstOrDefault(); }
/// <summary> /// Update the signature for this user /// </summary> /// <param name="user"></param> /// <param name="signature"></param> public void UpdateSignature(User user, string signature) { var model = _context .Users .Where(u => u.UserID == user.UserID) .FirstOrDefault(); if (model == null) return; model.Signature = signature; SaveChanges(); }
/// <summary> /// Adds a ChannelVisit record for this user/channel. Does not call SaveChanges() on the context. /// </summary> /// <param name="user"></param> /// <param name="channel"></param> private void AddChannelVisit(User user, Channel channel) { _context .ChannelVisits .Add(new ChannelVisit { FKChannelID = channel.ChannelID, FKUserID = user.UserID, DateVisit = DateTime.UtcNow }); }
/// <summary> /// Accept an invitation and set up a new user account /// </summary> /// <param name="username"></param> /// <param name="password"></param> /// <param name="suid">Invitation SUID</param> /// <returns></returns> public User Register(string username, string password, string suid) { Invite invite = GetInvite(suid); User invitedby = invite.UserInvitedBy; DateTime now = DateTime.UtcNow; User user = new User { DateAdded = now, FKUserIDInvitedBy = invite.FKUserIDInvitedBy, InviteLevel = invitedby.InviteLevel + 1, PasswordSHA256 = Utils.GetSHA256(password), Username = username }; user .ChannelVisits .Add(new ChannelVisit { FKChannelID = invite.FKChannelID, DateVisit = DateTime.UtcNow }); _context .Users .Add(user); invite.UserAcceptedBy = user; invite.DateAccepted = now; SaveChanges(); return user; }
/// <summary> /// Create a new Invite object, save it to the table and return it. If this nick!username@host already has an /// invite, return the existing object. /// </summary> /// <param name="inviter"></param> /// <param name="nick"></param> /// <param name="username"></param> /// <param name="host"></param> /// <param name="channelID"></param> /// <returns></returns> public Invite GetOrCreateInvite(User inviter, string nick, string username, string host, int channelID) { var existing = _context .Invites .Where(i => i.Nick == nick && i.User == username && i.Host == host) .FirstOrDefault(); if (existing != null) return existing; var invite = new Invite { FKChannelID = channelID, DateInvited = DateTime.UtcNow, FKUserIDInvitedBy = inviter.UserID, Nick = nick, User = username, Host = host, SUID = Utils.Get32ByteUID() }; _context .Invites .Add(invite); _context .SaveChanges(); return invite; }
/// <summary> /// Update the Auth table with the UserID that authenticated the token. Does not call SaveChanges() on the context. /// </summary> /// <param name="user"></param> /// <param name="suid"></param> public void MatchUserToAuthToken(User user, string suid) { var auth = _context .Auths .Where(a => a.SUID == suid) .FirstOrDefault(); if (auth == null) return; if (auth.FKUserID != null) return; auth.FKUserID = user.UserID; auth.DateAuthenticated = DateTime.UtcNow; }