Ejemplo n.º 1
0
        public object GetToken([FromQuery] SessionCodeQueryModel parameters)
        {
            var sessionHandler = AuthSessionStorage.GetHandler(parameters.SessionCode);

            if (sessionHandler == null)
            {
                throw new AuthenticationException("Session handler not found.");
            }
            else if (sessionHandler.UserUuid == null)
            {
                throw new AuthenticationException("Authentication not finished.");
            }
            else if (sessionHandler.IsExpired)
            {
                throw new AuthenticationException("Session handler has expired.");
            }

            try
            {
                var token = tokenRepository.CreateToken(sessionHandler.UserUuid.Value, new TimeSpan(TokenDurationDays, 0, 0, 0));
                return(TokenModel.Create(token));
            }
            finally
            {
                AuthSessionStorage.RemoveHandler(sessionHandler.Code);
            }
        }
Ejemplo n.º 2
0
        public object GetVkRedirectPage()
        {
            if (HttpContext.Request.Query.ContainsKey("error"))
            {
                throw new AuthenticationException($"Vk failed to authenticate user with error: {HttpContext.Request.Query["error"]}", "auth failed");
            }

            var vkCode = HttpContext.Request.Query["code"];
            var vkApi  = new VkApi(socialConfig.Vk);

            var(vkAccessToken, vkUserId, vkEmail) = vkApi.RequestAccessToken(vkCode);

            if (vkEmail.Length > MaxEmailLength)
            {
                vkEmail = null;
            }

            if (vkAccessToken == null)
            {
                throw new AuthenticationException("Failed to obtain vk access token.");
            }

            // TODO: Check given permissions
            vkApi.SetToken(vkAccessToken);

            var sessionCode    = HttpContext.Request.Query["state"];
            var sessionHandler = AuthSessionStorage.GetHandler(sessionCode);

            if (sessionHandler == null)
            {
                throw new AuthenticationException("Session handler not found.");
            }

            if (sessionHandler.IsExpired)
            {
                throw new AuthenticationException("Session handler has expired.");
            }

            var userInfo = vkApi.GetUserName();
            var name     = FormatName(userInfo.firstName, userInfo.lastName);

            var data = userRepository.CreateOrUpdateWithVK(vkUserId, vkAccessToken, name, vkEmail);

            sessionHandler.UserUuid = data.User.Uuid;

#if DEBUG
            return(data);
#else
            return(new OperationResultModel()
            {
                Result = true
            });
#endif
        }
Ejemplo n.º 3
0
        public object GetIsAuthenticated([FromQuery] SessionCodeQueryModel parameters)
        {
            var handler = AuthSessionStorage.GetHandler(parameters.SessionCode);

            if (handler == null)
            {
                throw new AuthenticationException("Session handler not found.");
            }

            return(new OperationResultModel()
            {
                Result = handler.UserUuid != null
            });
        }
Ejemplo n.º 4
0
        public object GetSessionCode()
        {
            var handler = default(AuthSessionHandler);
            var result  = AuthSessionStorage.CreateSessionHandler(out handler);

            if (!result)
            {
                throw new AuthenticationException("Failed to create session handler.");
            }

            return(new SessionCodeModel()
            {
                Value = handler.Code
            });
        }