Пример #1
0
        /**
         * AUTO_GENERATED
         */
        public GetAccessTokenResponse GetAccessToken(GetAccessTokenRequest getAccessTokenRequest, string apiUserName)
        {
            string  response = Call("GetAccessToken", getAccessTokenRequest.ToNVPString(""), apiUserName);
            NVPUtil util     = new NVPUtil();

            return(GetAccessTokenResponse.CreateInstance(util.ParseNVPString(response), "", -1));
        }
Пример #2
0
        private void GetAccessToken(HttpContext context)
        {
            GetAccessTokenRequest gat = new GetAccessTokenRequest();

            String token    = context.Request.Params["txtrequest_token"];
            String verifier = context.Request.Params["txtverification_code"];

            gat.token    = token;
            gat.verifier = verifier;


            gat.requestEnvelope = new RequestEnvelope("en_US");
            GetAccessTokenResponse gats = null;

            try
            {
                PermissionsService service = new PermissionsService();
                gats = service.GetAccessToken(gat);
                context.Response.Write("<html><body><textarea rows=30 cols=80>");
                ObjectDumper.Write(gats, 5, context.Response.Output);
                context.Response.Write("</textarea></body></html>");
            }
            catch (System.Exception e)
            {
                context.Response.Write(e.Message);
            }
        }
Пример #3
0
        public void TestGrantAccessToken()
        {
            // Arrange
            var request         = new GenerateTemporaryOrganizerRequest(TEST_TOURNAMENT_ID, TEST_NAME, TEST_EMAIL);
            var expectedPayload = new GetAccessTokenResponse();

            expectedPayload.Token = TEST_TOKEN;
            var expectedResponse = new Response <GetAccessTokenResponse>(expectedPayload);

            var mockClient = new Mock <IOrganizerClient>();

            mockClient.Setup(client => client.GenerateTemporaryOrganizer(CREDENTIALS, request))
            .Returns(expectedResponse.WithSuccess());

            // Act
            var organizerController = new OrganizerController(
                requestFieldExtractor,
                mockClient.Object);

            var result   = organizerController.GrantAccessToken(request) as OkObjectResult;
            var response = result.Value as Response <GetAccessTokenResponse>;

            // Assert
            Assert.NotNull(response);
            Assert.True(response.IsSuccessStatusCode);
            Assert.Equal(expectedResponse.Payload, response.Payload);
        }
Пример #4
0
        public async Task <GetAccessTokenResponse> GetToken(string appId, string secret)
        {
            // {"access_token":"35_Kfc59VZI3rio3gSU6R_m0WKiq0EtILksW5igwkT4s0sYKGttSjtABEjewV-Aj0ZIic7ijDjrOIqKxKY_6KjOp5lc6Wn1NPJJ5vXtGNarJivhf8IIy4PilEl1cV0BxCnl1enzBU_0AZPr4fQBQDFjACAVIK","expires_in":7200}

            string url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appId}&secret={secret}";
            GetAccessTokenResponse response = await this._client.GetAsync <GetAccessTokenResponse>(url, _logger);

            return(response);
        }
    public void GetAccessToken()
    {
        GetAccessTokenSample   sample = new GetAccessTokenSample();
        GetAccessTokenResponse getAccessTokenResponse = sample.GetAccessTokenAPIOperation();

        Assert.IsNotNull(getAccessTokenResponse);
        // Please change the sample inputs according to the documentation in the sample for the following assertions:
        // Assert.AreEqual(getAccessTokenResponse.responseEnvelope.ack.ToString().Trim().ToUpper(), "SUCCESS");
        // Assert.IsNotNull(getAccessTokenResponse.token);
    }
Пример #6
0
        /// <summary>
        /// 构造返回的数据
        /// </summary>
        /// <param name="sysUser"></param>
        /// <returns></returns>
        public GetAccessTokenResponse GetAccessTokenResponse(SysUser sysUser)
        {
            var token       = JwtHelper.GenerateToken(sysUser.UserId, out DateTime expiresTime);
            var accessToken = new GetAccessTokenResponse()
            {
                AccessToken = $"Bearer {token}",
                ExpiresIn   = SystemConfig.AuthenticationConfig.ExpiresHours * 3600 - 600
            };

            return(accessToken);
        }
        public async void Handle(PayPalGetAccessToken3dPartyCommand command)
        {
            GetAccessTokenResponse tokenResponse = await PayPalService.GetAccessToken(command.RequestToken, command.VerificationCode);

            InfoAccumulator info = new InfoAccumulator();

            SendReply(info, command, resp => {
                resp.Token       = tokenResponse.token;
                resp.TokenSecret = tokenResponse.tokenSecret;
            });
        }
Пример #8
0
        /// <summary>
        ///
        /// </summary>
        ///<param name="getAccessTokenRequest"></param>
        ///<param name="apiUserName">API Username that you want to authenticate this call against. This username and the corresponding 3-token/certificate credentials must be available in Web.Config/App.Config</param>
        public GetAccessTokenResponse GetAccessToken(GetAccessTokenRequest getAccessTokenRequest, string apiUserName)
        {
            IAPICallPreHandler apiCallPreHandler = new PlatformAPICallPreHandler(this.config, getAccessTokenRequest.ToNVPString(string.Empty), ServiceName, "GetAccessToken", apiUserName, getAccessToken(), getAccessTokenSecret());

            ((PlatformAPICallPreHandler)apiCallPreHandler).SDKName    = SDKName;
            ((PlatformAPICallPreHandler)apiCallPreHandler).SDKVersion = SDKVersion;
            ((PlatformAPICallPreHandler)apiCallPreHandler).PortName   = "Permissions";

            NVPUtil util = new NVPUtil();

            return(GetAccessTokenResponse.CreateInstance(util.ParseNVPString(Call(apiCallPreHandler)), string.Empty, -1));
        }
        public async Task GivenRequestMatchingToken_WhenTokenHasExpired_ReturnUnauthorised(string token)
        {
            StubTokenReaderWithExpiredToken(token);

            GetAccessTokenRequest request = new GetAccessTokenRequest
            {
                Token = token
            };

            GetAccessTokenResponse response = await _classUnderTest.ExecuteAsync(request, CancellationToken.None);

            response.Authorised.Should().BeFalse();
        }
        public async Task GivenRequestMatchingToken_WhenTokenIsValid_ReturnCreatedAccessToken(string createdToken)
        {
            StubTokenReaderWithValidToken("token", "*****@*****.**");
            StubAccessTokenCreator(createdToken);

            GetAccessTokenRequest request = new GetAccessTokenRequest
            {
                Token = "token"
            };

            GetAccessTokenResponse response = await _classUnderTest.ExecuteAsync(request, CancellationToken.None);

            response.AccessToken.Should().BeEquivalentTo(createdToken);
        }
        public async Task GivenRequestMatchingToken_WhenTokenHasNotExpired_ReturnAuthorised(string token)
        {
            StubTokenReaderWithValidToken(token, "*****@*****.**");
            StubAccessTokenCreator("token");

            GetAccessTokenRequest request = new GetAccessTokenRequest
            {
                Token = token
            };

            GetAccessTokenResponse response = await _classUnderTest.ExecuteAsync(request, CancellationToken.None);

            response.Authorised.Should().BeTrue();
        }
        public async Task GivenRequestWithNoneMatchingToken_ReturnUnauthorised(string token)
        {
            _tokenReaderSpy.Setup(e => e.ReadAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync((IAuthenticationToken)null);

            GetAccessTokenRequest request = new GetAccessTokenRequest
            {
                Token = token
            };

            GetAccessTokenResponse response = await _classUnderTest.ExecuteAsync(request, CancellationToken.None);

            response.Authorised.Should().BeFalse();
        }
        public static GetAccessTokenResponse Map(AccessToken accessToken, User user)
        {
            GetAccessTokenResponse response = new GetAccessTokenResponse
            {
                UserKey    = accessToken.UserKey,
                User       = UserMapper.Map(user),
                Token      = accessToken.Token,
                IpInfo     = accessToken.IpInfo,
                Ip         = accessToken.Ip,
                DeviceInfo = accessToken.DeviceInfo,
                CreateDate = accessToken.CreateDate
            };

            return(response);
        }
Пример #14
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            GetAccessTokenResponse response = new GetAccessTokenResponse();

            context.Read();
            int targetDepth = context.CurrentDepth;

            while (context.ReadAtDepth(targetDepth))
            {
                if (context.TestExpression("AccessToken", targetDepth))
                {
                    var unmarshaller = StringUnmarshaller.Instance;
                    response.AccessToken = unmarshaller.Unmarshall(context);
                    continue;
                }
            }

            return(response);
        }
Пример #15
0
        public async Task GivenUserIsAuthorised_AndTheyGetAOneTimeUseToken_TheyCanOnlyGetAnApiKeyOnce()
        {
            using (ATransaction())
            {
                var notifyRequest = await RequestAccessToApplication();

                string token = GetTokenFromNotifyRequest(notifyRequest);

                GetAccessTokenRequest tokenRequest = new GetAccessTokenRequest
                {
                    Token = token
                };

                await _getAccessToken.ExecuteAsync(tokenRequest, CancellationToken.None);

                GetAccessTokenResponse response =
                    await _getAccessToken.ExecuteAsync(tokenRequest, CancellationToken.None);

                response.Should().NotBeNull();
                response.Authorised.Should().BeFalse();
            }
        }
Пример #16
0
        public async Task <object> Any(GetAccessToken request)
        {
            var jwtAuthProvider = (JwtAuthProvider)AuthenticateService.GetRequiredJwtAuthProvider();

            if (jwtAuthProvider.RequireSecureConnection && !Request.IsSecureConnection)
            {
                throw HttpError.Forbidden(ErrorMessages.JwtRequiresSecureConnection.Localize(Request));
            }

            var refreshTokenCookie = Request.Cookies.TryGetValue(Keywords.RefreshTokenCookie, out var refTok)
                ? refTok.Value
                : null;

            var refreshToken = request.RefreshToken ?? refreshTokenCookie;
            var accessToken  = await jwtAuthProvider.CreateAccessTokenFromRefreshToken(refreshToken, Request).ConfigAwait();

            var response = new GetAccessTokenResponse
            {
                AccessToken = accessToken
            };

            // Don't return JWT in Response Body if Refresh Token Cookie was used
            if (refreshTokenCookie == null && jwtAuthProvider.UseTokenCookie != true)
            {
                return(response);
            }

            var httpResult = new HttpResult(new GetAccessTokenResponse())
                             .AddCookie(Request,
                                        new Cookie(Keywords.TokenCookie, accessToken, Cookies.RootPath)
            {
                HttpOnly = true,
                Secure   = Request.IsSecureConnection,
                Expires  = DateTime.UtcNow.Add(jwtAuthProvider.ExpireTokensIn),
            });

            return(httpResult);
        }
Пример #17
0
        public async Task GivenUserIsAuthorised_AndTheyGetAOneTimeUseToken_TheyCanGetAnApiKeyWithTheirToken()
        {
            using (ATransaction())
            {
                var notifyRequest = await RequestAccessToApplication();

                string token = GetTokenFromNotifyRequest(notifyRequest);

                GetAccessTokenRequest tokenRequest = new GetAccessTokenRequest
                {
                    Token = token
                };

                GetAccessTokenResponse response =
                    await _getAccessToken.ExecuteAsync(tokenRequest, CancellationToken.None);

                string tokenEmail = GetEmailFromAccessToken(response.AccessToken);

                response.Should().NotBeNull();
                response.AccessToken.Should().NotBeNull();
                tokenEmail.Should().BeEquivalentTo("*****@*****.**");
            }
        }
Пример #18
0
        public async Task <GetAccessTokenResponse> GetNewAccessTokenAsync(GetAccessTokenRequest request)
        {
            _logger.LogDebug($"Attempting to get access token using authToken: {request.RefreshToken}. Rerum api url: {_url}.");
            var rt = new GetAccessTokenResponse {
                IsSuccess = true
            };

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders
                .Accept
                .Add(new MediaTypeWithQualityHeaderValue("application/json"));

                var response = await client.PostAsJsonAsync($@"{_url}/api/accessToken.action", new { refresh_token = request.RefreshToken });

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    _logger.LogDebug($"Access token retrieved successful.");
                    var respString = await response.Content.ReadAsStringAsync();

                    dynamic obj = JsonConvert.DeserializeObject <dynamic>(respString);
                    rt.AccessToken = obj.access_token;
                    rt.IdToken     = obj.id_token;

                    return(rt);
                }
                else
                {
                    var message = $"An error occurred retrieving access token from Rerum. Status Code: {response.StatusCode}, Error: {response.ReasonPhrase}.";
                    _logger.LogError(message);
                    rt.IsSuccess = false;
                    rt.Message   = message;
                }
            }
            return(rt);
        }
Пример #19
0
        public GetAccessTokenResponse getAccessToken(GetAccessTokenRequest request)
        {
            GetAccessTokenResponse PResponse = null;

            PayLoad = null;

            try
            {
                APIProfile.EndPointAppend = Endpoint + "GetAccessToken";
                if (APIProfile.RequestDataformat == "SOAP11")
                {
                    PayLoad = SoapEncoder.Encode(request);
                }
                else if (APIProfile.RequestDataformat == "XML")
                {
                    PayLoad = PayPal.Platform.SDK.XMLEncoder.Encode(request);
                }
                else
                {
                    PayLoad = PayPal.Platform.SDK.JSONSerializer.ToJavaScriptObjectNotation(request);
                }
                res = CallAPI();

                if (APIProfile.RequestDataformat == "JSON")
                {
                    object obj = JSONSerializer.JsonDecode(res.ToString(), typeof(PayPal.Services.Private.Permissions.GetAccessTokenResponse));
                    if (obj.GetType() == typeof(PayPal.Services.Private.Permissions.GetAccessTokenResponse))
                    {
                        PResponse = (PayPal.Services.Private.Permissions.GetAccessTokenResponse)obj;
                    }
                    string name = Enum.GetName(PResponse.responseEnvelope.ack.GetType(), PResponse.responseEnvelope.ack);

                    if (name == "Failure")
                    {
                        this.result = "FAILURE";
                        TransactionException tranactionEx = new TransactionException(PayLoadFromat.JSON, res.ToString());
                        this.lastError = tranactionEx;
                    }
                }

                else if (res.ToString().ToUpper().Replace("<ACK>FAILURE</ACK>", "").Length != res.ToString().Length)
                {
                    this.result = "FAILURE";

                    if (APIProfile.RequestDataformat == "SOAP11")
                    {
                        TransactionException tranactionEx = new TransactionException(PayLoadFromat.SOAP11, res.ToString());
                        this.lastError = tranactionEx;
                    }
                    else if (APIProfile.RequestDataformat == "XML")
                    {
                        TransactionException tranactionEx = new TransactionException(PayLoadFromat.XML, res.ToString());
                        this.lastError = tranactionEx;
                    }
                    else
                    {
                        TransactionException tranactionEx = new TransactionException(PayLoadFromat.JSON, res.ToString());
                        this.lastError = tranactionEx;
                    }
                }
                else
                {
                    if (APIProfile.RequestDataformat == "SOAP11")
                    {
                        PResponse = (PayPal.Services.Private.Permissions.GetAccessTokenResponse)SoapEncoder.Decode(res.ToString(), typeof(PayPal.Services.Private.Permissions.GetAccessTokenResponse));
                    }
                    else if (APIProfile.RequestDataformat == "XML")
                    {
                        PResponse = (PayPal.Services.Private.Permissions.GetAccessTokenResponse)XMLEncoder.Decode(res.ToString(), typeof(PayPal.Services.Private.Permissions.GetAccessTokenResponse));
                    }
                    else
                    {
                        object obj = JSONSerializer.JsonDecode(res.ToString(), typeof(PayPal.Services.Private.Permissions.GetAccessTokenResponse));
                        if (obj.GetType() == typeof(PayPal.Services.Private.Permissions.GetAccessTokenResponse))
                        {
                            PResponse = (PayPal.Services.Private.Permissions.GetAccessTokenResponse)obj;
                        }
                    }
                    this.result = "SUCCESS";
                }
            }
            catch (FATALException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new FATALException("Error occurred in Permissions -> GetAccessToken method.", ex);
            }
            return(PResponse);
        }
    // # GetAccessToken API Operation
    // Use the GetAccessToken API operation to obtain an access token for a set of permissions
    public GetAccessTokenResponse GetAccessTokenAPIOperation()
    {
        // Create the GetAccessTokenResponse object
        GetAccessTokenResponse responseGetAccessToken = new GetAccessTokenResponse();

        try
        {
            // Create the GetAccessTokenRequest object
            GetAccessTokenRequest requestGetAccessToken = new GetAccessTokenRequest();

            // The request token from the response to RequestPermissions.
            requestGetAccessToken.token = "AAAAAAAXO-JZhFLpTLLe";

            // The verification code returned in the redirect from PayPal to the
            // return URL after `RequestPermissions` call
            requestGetAccessToken.verifier = "R.X1BWK7QEv-dcjQEzk2xg";

            // Create the service wrapper object
            PermissionsService service = new PermissionsService();

            // # API call
            // Invoke the GetAccessToken method in service wrapper object
            responseGetAccessToken = service.GetAccessToken(requestGetAccessToken);

            if (responseGetAccessToken != null)
            {
                // Response envelope acknowledgement
                string acknowledgement = "GetAccessToken API Operation - ";
                acknowledgement += responseGetAccessToken.responseEnvelope.ack.ToString();
                logger.Info(acknowledgement + "\n");
                Console.WriteLine(acknowledgement + "\n");

                // # Success values
                if (responseGetAccessToken.responseEnvelope.ack.ToString().Trim().ToUpper().Equals("SUCCESS"))
                {
                    logger.Info("Access Token : " + responseGetAccessToken.token + "\n");
                    logger.Info("Token Secret : " + responseGetAccessToken.tokenSecret + "\n");
                    Console.WriteLine("Access Token : " + responseGetAccessToken.token + "\n");
                    Console.WriteLine("Token Secret : " + responseGetAccessToken.tokenSecret + "\n");
                }
                // # Error Values
                else
                {
                    List <ErrorData> errorMessages = responseGetAccessToken.error;
                    foreach (ErrorData error in errorMessages)
                    {
                        logger.Debug("API Error Message : " + error.message);
                        Console.WriteLine("API Error Message : " + error.message + "\n");
                    }
                }
            }
        }
        // # Exception log
        catch (System.Exception ex)
        {
            // Log the exception message
            logger.Debug("Error Message : " + ex.Message);
            Console.WriteLine("Error Message : " + ex.Message);
        }
        return(responseGetAccessToken);
    }
Пример #21
0
        private void GetAccessToken(HttpContext context)
        {
            GetAccessTokenRequest gat = new GetAccessTokenRequest();

            // (Required) The request token from the response to RequestPermissions.
            string token = context.Request.Params["txtrequest_token"];

            // (Required) The verification code returned in the redirect from PayPal to the return URL.
            string verifier = context.Request.Params["txtverification_code"];

            gat.token    = token;
            gat.verifier = verifier;

            // (Required) RFC 3066 language in which error messages are returned;
            // by default it is en_US, which is the only language currently supported.
            gat.requestEnvelope = new RequestEnvelope("en_US");
            GetAccessTokenResponse gats = null;

            try
            {
                // ## Creating service wrapper object
                // Creating service wrapper object to make API call
                // Configuration map containing signature credentials and other required configuration.
                // For a full list of configuration parameters refer in wiki page
                // [https://github.com/paypal/sdk-core-dotnet/wiki/SDK-Configuration-Parameters]
                PermissionsService service = new PermissionsService(Configuration.GetAcctAndConfig());

                gats = service.GetAccessToken(gat);
                context.Response.Write("<html><body><textarea rows=30 cols=80>");
                ObjectDumper.Write(gats, 5, context.Response.Output);
                context.Response.Write("</textarea></br>");

                //Selenium Test Case
                context.Response.Write("</br>Acknowledgement: ");
                context.Response.Write("<div id = '");
                context.Response.Write("Acknowledgement");
                context.Response.Write("'>");
                context.Response.Write(gats.responseEnvelope.ack);
                context.Response.Write("</div>");

                context.Response.Write("</br>Request token: ");
                context.Response.Write("<div id = '");
                context.Response.Write("Request token");
                context.Response.Write("'>");
                context.Response.Write(context.Request.Params["txtrequest_token"]);
                context.Response.Write("</div>");

                context.Response.Write("</br>Verification code: ");
                context.Response.Write("<div id = '");
                context.Response.Write("Verification code");
                context.Response.Write("'>");
                context.Response.Write(context.Request.Params["txtverification_code"]);
                context.Response.Write("</div>");

                context.Response.Write("</br>token: ");
                context.Response.Write("<div id = '");
                context.Response.Write("token");
                context.Response.Write("'>");
                context.Response.Write(gats.token);
                context.Response.Write("</div>");

                context.Response.Write("</br>tokenSecret: ");
                context.Response.Write("<div id = '");
                context.Response.Write("tokenSecret");
                context.Response.Write("'>");
                context.Response.Write(gats.tokenSecret);
                context.Response.Write("</div>");
            }
            catch (System.Exception e)
            {
                context.Response.Write(e.Message);
            }
        }
Пример #22
0
        public async Task <object> Any(GetAccessToken request)
        {
            var jwtAuthProvider = (JwtAuthProvider)AuthenticateService.GetRequiredJwtAuthProvider();

            if (jwtAuthProvider.RequireSecureConnection && !Request.IsSecureConnection)
            {
                throw HttpError.Forbidden(ErrorMessages.JwtRequiresSecureConnection.Localize(Request));
            }

            if (string.IsNullOrEmpty(request.RefreshToken))
            {
                throw new ArgumentNullException(nameof(request.RefreshToken));
            }

            JsonObject jwtPayload;

            try
            {
                jwtPayload = jwtAuthProvider.GetVerifiedJwtPayload(Request, request.RefreshToken.Split('.'));
            }
            catch (ArgumentException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new ArgumentException(ex.Message);
            }

            if (jwtPayload == null)
            {
                throw new ArgumentException(ErrorMessages.TokenInvalid.Localize(Request));
            }

            jwtAuthProvider.AssertJwtPayloadIsValid(jwtPayload);

            if (jwtAuthProvider.ValidateRefreshToken != null && !jwtAuthProvider.ValidateRefreshToken(jwtPayload, Request))
            {
                throw new ArgumentException(ErrorMessages.RefreshTokenInvalid.Localize(Request), nameof(request.RefreshToken));
            }

            var userId = jwtPayload["sub"];

            var result = await Request.GetSessionFromSourceAsync(userId, async (authRepo, userAuth) => {
                if (await jwtAuthProvider.IsAccountLockedAsync(authRepo, userAuth))
                {
                    throw new AuthenticationException(ErrorMessages.UserAccountLocked.Localize(Request));
                }
            }).ConfigAwait();

            if (result == null)
            {
                throw new NotSupportedException("JWT RefreshTokens requires a registered IUserAuthRepository or an AuthProvider implementing IUserSessionSource");
            }

            var accessToken = jwtAuthProvider.CreateJwtBearerToken(Request,
                                                                   session: result.Session, roles: result.Roles, perms: result.Permissions);

            var response = new GetAccessTokenResponse
            {
                AccessToken = accessToken
            };

            if (request.UseTokenCookie.GetValueOrDefault(jwtAuthProvider.UseTokenCookie) != true)
            {
                return(response);
            }

            return(new HttpResult(new GetAccessTokenResponse())
            {
                Cookies =
                {
                    new Cookie(Keywords.TokenCookie, accessToken, Cookies.RootPath)
                    {
                        HttpOnly = true,
                        Secure = Request.IsSecureConnection,
                        Expires = DateTime.UtcNow.Add(jwtAuthProvider.ExpireTokensIn),
                    }
                }
            });
        }
Пример #23
0
        public async Task <GetAccessTokenResponse> GetAccessToken(string username, string password, IClientProfile clientProfile, bool rememberMe, bool enableTagging)
        {
            if (_accessToken != null && !_accessTokenIsExpired && _lastAuthenticationProfileGuid == clientProfile.Guid)
            {
                return new GetAccessTokenResponse {
                           Success = true
                }
            }
            ;

            _recaptchaToken = App.IsAdministrator() && LauncherContext.Instance.LauncherSettingsManager.LauncherSettings.EnableCaptchaBypass
                ? await WebServer.Instance.Run() ?? CreateString(256) : CreateString(256);

            _restClient = new RestClient(new Uri("https://www.nexon.com"), null);

            var request = _restClient.Create("/account-webapi/login/launcher");

            var deviceId = GetDeviceUuid(enableTagging ? username : "");

            var initialRequestBody = new AccountLoginRequest
            {
                AutoLogin      = rememberMe,
                CaptchaToken   = _recaptchaToken,
                CaptchaVersion = "v3",
                ClientId       = BodyClientId,
                DeviceId       = deviceId,
                Id             = username,
                Password       = password,
                Scope          = BodyScope
            };

            request.SetBody(initialRequestBody);

            RestResponse response = null;

            try
            {
                if (App.IsAdministrator() && LauncherContext.Instance.LauncherSettingsManager.LauncherSettings.EnableCaptchaBypass)
                {
                    WebServer.Instance.Stop();
                }
            }
            catch (Exception ex)
            {
                Log.Exception(ex, "Failure during WebServer.Stop");
            }

            response = await request.ExecutePost();

            // dispose of password yo
            password           = null;
            initialRequestBody = new AccountLoginRequest();
            // Compiler tricks to ensure it isn't optimized away
            var ps = password;

            var data = "";

            if (response.StatusCode == HttpStatusCode.BadRequest)
            {
                data = await response.GetContent();

                var responseObject = JsonConvert.DeserializeObject <ErrorResponse>(data);
                var rsp            = new GetAccessTokenResponse(responseObject);
                Log.Info("Login Error: {0} Message: {1}", rsp.Code, rsp.Message);
                rsp.Success = false;

                if (rsp.Code == NexonErrorCode.UserDoesNotExist)
                {
                    rsp.Message = "Username does not exist!";
                }
                if (rsp.Code == NexonErrorCode.InvalidParameter && rsp.Message.Contains("error.email"))
                {
                    rsp.Message = "Malformed email!";
                }

                return(rsp);
            }

            if (response.StatusCode == HttpStatusCode.NotFound)
            {
                var responseObject = new GetAccessTokenResponse();
                responseObject.Success     = false;
                responseObject.Description = "Username does not exist!";
                responseObject.Code        = "NOTFOUND";
                responseObject.Message     = responseObject.Description;
                return(responseObject);
            }

            data = await response.GetContent();

            var body = JsonConvert.DeserializeObject <AccountLoginResponse>(data);

            _accessToken           = body.AccessToken;
            _accessTokenExpiration = body.AccessTokenExpiresIn;
            _idToken           = body.IdToken;
            _idTokenExpiration = body.IdTokenExpiresIn;

            if (!rememberMe)
            {
                // Unset to be safe because I seem to be adding more bugs than fixes....
                ((ClientProfile)clientProfile).LastIdToken = "";
                ((ClientProfile)clientProfile).TokenExpirationTimeFrame = 0;
                ((ClientProfile)clientProfile).LastRefreshTime          = DateTime.MinValue;
            }
            else
            {
                ((ClientProfile)clientProfile).LastIdToken = _idToken;
                ((ClientProfile)clientProfile).TokenExpirationTimeFrame = _idTokenExpiration;
                ((ClientProfile)clientProfile).LastRefreshTime          = DateTime.Now;
            }

            ((ClientProfile)clientProfile).AutoLogin = rememberMe;

            _lastAuthenticationProfileGuid = clientProfile.Guid;

            _accessTokenIsExpired = false;
            _idTokenIsExpired     = false;
            StartAccessTokenExpiryTimer(_accessTokenExpiration);
            StartIdTokenExpiryTimer(_idTokenExpiration);

            _lastLoginUsername = username;

            return(new GetAccessTokenResponse {
                Success = true
            });
        }
Пример #24
0
        public object Any(GetAccessToken request)
        {
            var jwtAuthProvider = (JwtAuthProvider)AuthenticateService.GetRequiredJwtAuthProvider();

            if (jwtAuthProvider.RequireSecureConnection && !Request.IsSecureConnection)
            {
                throw HttpError.Forbidden(ErrorMessages.JwtRequiresSecureConnection.Localize(Request));
            }

            if (string.IsNullOrEmpty(request.RefreshToken))
            {
                throw new ArgumentNullException(nameof(request.RefreshToken));
            }

            JsonObject jwtPayload;

            try
            {
                jwtPayload = jwtAuthProvider.GetVerifiedJwtPayload(Request, request.RefreshToken.Split('.'));
            }
            catch (ArgumentException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new ArgumentException(ex.Message);
            }

            jwtAuthProvider.AssertJwtPayloadIsValid(jwtPayload);

            if (jwtAuthProvider.ValidateRefreshToken != null && !jwtAuthProvider.ValidateRefreshToken(jwtPayload, Request))
            {
                throw new ArgumentException(ErrorMessages.RefreshTokenInvalid.Localize(Request), nameof(request.RefreshToken));
            }

            var userId = jwtPayload["sub"];

            IAuthSession         session;
            IEnumerable <string> roles = null, perms = null;

            var userSessionSource = AuthenticateService.GetUserSessionSource();

            if (userSessionSource != null)
            {
                session = userSessionSource.GetUserSession(userId);
                if (session == null)
                {
                    throw HttpError.NotFound(ErrorMessages.UserNotExists.Localize(Request));
                }

                roles = session.Roles;
                perms = session.Permissions;
            }
            else if (AuthRepository is IUserAuthRepository userRepo)
            {
                var userAuth = userRepo.GetUserAuth(userId);
                if (userAuth == null)
                {
                    throw HttpError.NotFound(ErrorMessages.UserNotExists.Localize(Request));
                }

                if (jwtAuthProvider.IsAccountLocked(userRepo, userAuth))
                {
                    throw new AuthenticationException(ErrorMessages.UserAccountLocked.Localize(Request));
                }

                session = SessionFeature.CreateNewSession(Request, SessionExtensions.CreateRandomSessionId());
                session.PopulateSession(userAuth, userRepo);

                if (userRepo is IManageRoles manageRoles && session.UserAuthId != null)
                {
                    roles = manageRoles.GetRoles(session.UserAuthId);
                    perms = manageRoles.GetPermissions(session.UserAuthId);
                }
            }
            else
            {
                throw new NotSupportedException("JWT RefreshTokens requires a registered IUserAuthRepository or an AuthProvider implementing IUserSessionSource");
            }

            var accessToken = jwtAuthProvider.CreateJwtBearerToken(Request, session, roles, perms);

            var response = new GetAccessTokenResponse
            {
                AccessToken = accessToken
            };

            if (request.UseTokenCookie != true)
            {
                return(response);
            }

            return(new HttpResult(new GetAccessTokenResponse())
            {
                Cookies =
                {
                    new Cookie(Keywords.TokenCookie, accessToken, Cookies.RootPath)
                    {
                        HttpOnly = true,
                        Secure = Request.IsSecureConnection,
                        Expires = DateTime.UtcNow.Add(jwtAuthProvider.ExpireTokensIn),
                    }
                }
            });
        }
Пример #25
0
        private void GetAccessToken(HttpContext context)
        {
            GetAccessTokenRequest gat = new GetAccessTokenRequest();

            String token    = context.Request.Params["txtrequest_token"];
            String verifier = context.Request.Params["txtverification_code"];

            gat.token    = token;
            gat.verifier = verifier;

            gat.requestEnvelope = new RequestEnvelope("en_US");
            GetAccessTokenResponse gats = null;

            try
            {
                PermissionsService service = new PermissionsService();
                gats = service.GetAccessToken(gat);
                context.Response.Write("<html><body><textarea rows=30 cols=80>");
                ObjectDumper.Write(gats, 5, context.Response.Output);
                context.Response.Write("</textarea></br>");

                //Selenium Test Case
                context.Response.Write("</br>Acknowledgement: ");
                context.Response.Write("<div id = '");
                context.Response.Write("Acknowledgement");
                context.Response.Write("'>");
                context.Response.Write(gats.responseEnvelope.ack);
                context.Response.Write("</div>");

                context.Response.Write("</br>Request token: ");
                context.Response.Write("<div id = '");
                context.Response.Write("Request token");
                context.Response.Write("'>");
                context.Response.Write(context.Request.Params["txtrequest_token"]);
                context.Response.Write("</div>");

                context.Response.Write("</br>Verification code: ");
                context.Response.Write("<div id = '");
                context.Response.Write("Verification code");
                context.Response.Write("'>");
                context.Response.Write(context.Request.Params["txtverification_code"]);
                context.Response.Write("</div>");

                context.Response.Write("</br>token: ");
                context.Response.Write("<div id = '");
                context.Response.Write("token");
                context.Response.Write("'>");
                context.Response.Write(gats.token);
                context.Response.Write("</div>");

                context.Response.Write("</br>tokenSecret: ");
                context.Response.Write("<div id = '");
                context.Response.Write("tokenSecret");
                context.Response.Write("'>");
                context.Response.Write(gats.tokenSecret);
                context.Response.Write("</div>");
            }
            catch (System.Exception e)
            {
                context.Response.Write(e.Message);
            }
        }