public static string NewTicket(string device) { using (AuthLogic.Disable()) using (Transaction tr = new Transaction()) { CleanExpiredTickets(UserEntity.Current); UserTicketEntity result = new UserTicketEntity { User = UserEntity.Current.ToLite(), Device = device, ConnectionDate = TimeZoneManager.Now, Ticket = Guid.NewGuid().ToString(), }; result.Save(); return tr.Commit(result.StringTicket()); } }
public static UserEntity UpdateTicket(string device, ref string ticket) { using (AuthLogic.Disable()) using (Transaction tr = new Transaction()) { Tuple<PrimaryKey, string> pair = UserTicketEntity.ParseTicket(ticket); UserEntity user = Database.Retrieve<UserEntity>(pair.Item1); CleanExpiredTickets(user); UserTicketEntity userTicket = user.UserTickets().SingleOrDefaultEx(t => t.Ticket == pair.Item2); if (userTicket == null) { throw new UnauthorizedAccessException("User attempted to log-in with an invalid ticket"); } UserTicketEntity result = new UserTicketEntity { User = user.ToLite(), Device = device, ConnectionDate = TimeZoneManager.Now, Ticket = Guid.NewGuid().ToString(), }.Save(); ticket = result.StringTicket(); return tr.Commit(user); } }