public async Task <AuthResponse> TestPreAuth([FromBody] AuthTicketData request)
        {
            var    auth_data = (await((AuthSessionRepository)sessionRepository).decodeAuthToken(request.token));
            String true_sig  = auth_data["true_signature"].ToString();

            if (!true_sig.Equals(request.challenge))
            {
                throw new AuthInvalidCredentialsException();
            }
            AuthResponse response = new AuthResponse();
            int          profileid = 0, userid = 0;

            if (int.TryParse(auth_data["profileId"].ToString(), out profileid))
            {
                response.profile = (await profileRepository.Lookup(new ProfileLookup {
                    id = profileid
                })).FirstOrDefault();
                if (response.profile == null)
                {
                    throw new NoSuchUserException();
                }
            }

            if (int.TryParse(auth_data["userId"].ToString(), out userid))
            {
                response.user = (await userRepository.Lookup(new UserLookup {
                    id = userid
                })).FirstOrDefault();
                if (response.user == null)
                {
                    throw new NoSuchUserException();
                }
            }

            Session session = new Session();

            session.profile = response.profile;
            session.user    = response.user;

            int expiresAt = 0;

            if (int.TryParse(auth_data["expiresAt"].ToString(), out expiresAt))
            {
                System.DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
                dtDateTime        = dtDateTime.AddSeconds(expiresAt).ToLocalTime();
                session.expiresAt = dtDateTime;
                response.session  = await sessionRepository.Create(session);
            }


            return(response);
        }
        public async Task <AuthTicketData> GenAuthTicket([FromBody] AuthRequest authRequest)
        {
            AuthTicketData response = new AuthTicketData();
            var            profile  = (await profileRepository.Lookup(authRequest.profile)).FirstOrDefault();

            if (profile == null)
            {
                throw new NoSuchUserException();
            }

            DateTime expiresAt = DateTime.UtcNow.AddDays(1);

            if (authRequest.expiresIn.HasValue)
            {
                expiresAt = expiresAt.Add(authRequest.expiresIn.Value);
            }

            Tuple <String, String> ticket_data = await sessionRepository.generateAuthToken(profile, expiresAt);

            response.token     = ticket_data.Item1;
            response.challenge = ticket_data.Item2;
            return(response);
        }