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