Пример #1
0
        public override AuthorizationResponse Login(AuthorizationRequest request, Metadata headers = null, DateTime?deadline = null,
                                                    CancellationToken cancellationToken            = default(CancellationToken))
        {
            AuthorizationResponse response = base.Login(request, headers, deadline, cancellationToken);

            Auth.Login(response.Token);
            return(response);
        }
Пример #2
0
        /// <inheritdoc/>
        public virtual async Task <CloudStorageToken> FetchTokenAsync(string redirectedUrl, string state, string codeVerifier)
        {
            if (string.IsNullOrWhiteSpace(redirectedUrl))
            {
                throw new ArgumentNullException(nameof(redirectedUrl));
            }
            if (string.IsNullOrWhiteSpace(state))
            {
                throw new ArgumentNullException(nameof(state));
            }

            AuthorizationResponse response = OAuth2Utils.ParseAuthorizationResponseUrl(redirectedUrl);

            // Check whether the user denied access
            if (!response.IsAccessGranted)
            {
                return(null);
            }

            // Verify state
            if (response.State != state)
            {
                throw new CloudStorageException("The authorization response has a wrong state, this indicates a hacking attempt.", null);
            }

            // Determine flow type
            AuthorizationFlow flow;

            if (!string.IsNullOrWhiteSpace(response.Token))
            {
                flow = AuthorizationFlow.Token;
            }
            else if (!string.IsNullOrWhiteSpace(response.Code))
            {
                flow = AuthorizationFlow.Code;
            }
            else
            {
                throw new CloudStorageException("The authorization response is neither form a token-flow, nor from a code-flow request.", null);
            }

            switch (flow)
            {
            case AuthorizationFlow.Token:
                return(new CloudStorageToken
                {
                    AccessToken = response.Token,
                    ExpiryDate = null,
                    RefreshToken = null
                });

            case AuthorizationFlow.Code:
                return(await ExchangeCodeForTokenAsync(response.Code, codeVerifier));

            default:
                return(null);    // Never happens
            }
        }
Пример #3
0
        public AuthorizationResponse IsAuthorized(string userId)
        {
            AuthorizationResponse authorizationResponse = new AuthorizationResponse
            {
                IsAuthorized = true
            };

            return(authorizationResponse);
        }
Пример #4
0
        public void SetAuthorization(string feed, string topic, AuthorizationResponse authorization)
        {
            if (!_authorizations.TryGetValue(feed, out var topicAuthorizations))
            {
                _authorizations.Add(feed, topicAuthorizations = new Dictionary <string, AuthorizationResponse>());
            }

            topicAuthorizations[topic] = authorization;
        }
 public SettlementRequest FromAuthorizationResponse(AuthorizationResponse response)
 {
     return new SettlementRequest
         {
             AccountNumber = response.AccountNumber,
             TransactionId = response.TransactionId,
             ProviderTransactionId = response.ProviderTransactionId
         };
 }
Пример #6
0
        public async Task <AuthorizationResponse> IsHouseholdAuthorized(string userId, int occupantId)
        {
            AuthorizationResponse authorizationResponse = new AuthorizationResponse
            {
                IsAuthorized = await checkHousehold(userId, occupantId)
            };

            return(authorizationResponse);
        }
Пример #7
0
        //

        void it_is_approved_when_any_transaction_is_approved()
        {
            var response = new AuthorizationResponse();

            response.Transactions.Add(new Transaction {
                Approved = true
            });
            response.Approved.ShouldBeTrue();
        }
Пример #8
0
        public override async Task AuthorizationCodeFlow_Login_CallbackAsync(HttpContext httpContext)
        {
            var idp = CreateModelOIDCAuthenticationServer();

            Trace.Write("AuthorizationCodeFlow_Login_CallbackAsync");
            var context = new SVAuthRequestContext(SVX_Principal, httpContext);

            var dummyAuthorizationRequest = new AuthorizationRequest();

            //REDACTED's original implementation, without detaching concdst_conckey

            /*var authorizationResponse = (OAuth20.AuthorizationResponse)Utils.ObjectFromFormPost(
             *  context.http.Request.Form,typeof(OAuth20.AuthorizationResponse));
             */

            JObject jo = detach_concdst_conckey_formpost(ref context, "  ");
            AuthorizationResponse authorizationResponse = (AuthorizationResponse)Utils.UnreflectObject(jo, typeof(AuthorizationResponse));;

            GetMessageStructures().authorizationResponse.ImportWithModel(authorizationResponse,
                                                                         () => { idp.FakeCodeEndpoint(dummyAuthorizationRequest, authorizationResponse); },
                                                                         SVX.Channel.GenerateNew(SVX_Principal), // unknown producer
                                                                         context.channel);

            /*GetMessageStructures().authorizationResponse.Import(authenticationResponse,
             *  SVX.PrincipalFacet.GenerateNew(SVX_Principal),  // unknown producer
             *  context.client);*/

            var _AccessTokenRequest = SVX.SVX_Ops.Call(createAccessTokenRequest, authorizationResponse);

            GetMessageStructures().accessTokenRequest.Export(_AccessTokenRequest, idpParticipantId.principal, null);
            var rawReq = marshalAccessTokenRequest(_AccessTokenRequest);
            var RawAccessTokenResponse = await Utils.PerformHttpRequestAsync(rawReq);

            Trace.Write("Got AccessTokenResponse");

            JObject       jObject       = JObject.Parse(RawAccessTokenResponse.Content.ReadAsStringAsync().Result);
            TokenResponse tokenResponse = Utils.UnreflectObject <TokenResponse>(jObject);

            GetMessageStructures().tokenResponse.ImportDirectResponseWithModel(tokenResponse,
                                                                               () => { idp.FakeTokenEndpoint(_AccessTokenRequest, tokenResponse); },
                                                                               idpParticipantId.principal,
                                                                               SVX_Principal
                                                                               );

            if (!String.IsNullOrEmpty(tokenResponse.id_token.theParams.nonce))
            {
                HashAlgorithm hashAlgo       = SHA1.Create();
                string        expected_nonce = BitConverter.ToString(hashAlgo.ComputeHash(System.Text.Encoding.UTF8.GetBytes(context.channel.id)));
                if (expected_nonce != tokenResponse.id_token.theParams.nonce)
                {
                    throw new Exception("invalid nonce");
                }
            }
            var conclusion = SVX.SVX_Ops.Call(createConclusionOidc, authorizationResponse, tokenResponse);

            await AuthenticationDone(conclusion, context);
        }
Пример #9
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            AuthorizationResponse  resp = AuthorizationResponse.FromIntent(Intent);
            AuthorizationException ex   = AuthorizationException.FromIntent(Intent);

            AuthService.Instance.AuthActivityCreated(resp, ex);
            Finish();
        }
        /// <summary>
        /// Compute the initial value for the login ID field in the
        /// authorization page.
        /// </summary>
        static string ComputeLoginId(AuthorizationResponse response)
        {
            if (response.Subject != null)
            {
                return(response.Subject);
            }

            return(response.LoginHint);
        }
        public override async Task <bool> InvokeAsync()
        {
            // Check SignInAs identity for authentication update
            if (Context.Authentication.User.Identity.IsAuthenticated)
            {
                await ValidateSignInAsIdentities();
            }

            // Check for valid callback URI
            var callbackUri = await KeycloakIdentity.GenerateLoginCallbackUriAsync(Options, Request.Uri);

            if (!Options.ForceBearerTokenAuth && Request.Uri.GetLeftPart(UriPartial.Path) == callbackUri.ToString())
            {
                // Create authorization result from query
                var authResult = new AuthorizationResponse(Request.Uri.Query);

                try
                {
                    // Validate passed state
                    var stateData = Global.StateCache.ReturnState(authResult.State);
                    if (stateData == null)
                    {
                        throw new BadRequestException("Invalid state: Please reattempt the request");
                    }

                    // Parse properties from state data
                    var properties =
                        stateData[Constants.CacheTypes.AuthenticationProperties] as AuthenticationProperties ??
                        new AuthenticationProperties();

                    // Process response
                    var kcIdentity =
                        await KeycloakIdentity.ConvertFromAuthResponseAsync(Options, authResult, Request.Uri);

                    var identity = await kcIdentity.ToClaimsIdentityAsync();

                    Context.Authentication.User.AddIdentity(identity);
                    SignInAsAuthentication(identity, properties, Options.SignInAsAuthenticationType);

                    // Redirect back to the original secured resource, if any
                    if (!string.IsNullOrWhiteSpace(properties.RedirectUri) &&
                        Uri.IsWellFormedUriString(properties.RedirectUri, UriKind.Absolute))
                    {
                        Response.Redirect(properties.RedirectUri);
                        return(true);
                    }
                }
                catch (BadRequestException exception)
                {
                    await GenerateErrorResponseAsync(HttpStatusCode.BadRequest, "Bad Request", exception.Message);

                    return(true);
                }
            }

            return(false);
        }
 public SettlementRequest FromAuthorizationResponse(AuthorizationResponse response)
 {
     return(new SettlementRequest
     {
         AccountNumber = response.AccountNumber,
         TransactionId = response.TransactionId,
         ProviderTransactionId = response.ProviderTransactionId
     });
 }
Пример #13
0
 private BackblazeDstInterop(string accountid, string applicationkey,
                             string bucketid, string bucketname, string connectionsettingsfile = null)
 {
     AccountID              = accountid;
     ApplicationKey         = applicationkey;
     BucketId               = bucketid;
     BucketName             = bucketname;
     ConnectionSettingsFile = connectionsettingsfile;
     AuthResp               = AuthorizeAccount().Result;
 }
Пример #14
0
        public void ShouldReturnErrorMessageWhenPassingNullRequest()
        {
            //Arrange
            AuthorizationTransaction authTransaction = new AuthorizationTransaction(null, null, logger, null);
            //Act
            AuthorizationResponse response = authTransaction.Execute(null);

            //Assert
            Assert.AreEqual("Ocorreu um erro na chamada da transação de autorização. Verifique o log de erro para mais detalhes", response.ReturnMessage);
        }
 public RequestAccessTokenMessage(IOwinRequest request, KeycloakAuthenticationOptions options,
                                  AuthorizationResponse authResponse)
     : base(request, options)
 {
     if (authResponse == null)
     {
         throw new ArgumentNullException();
     }
     AuthResponse = authResponse;
 }
Пример #16
0
        public AuthorizationResponse IsAuthorized(IRequisition entity, string userId)
        {
            if (entity.Status == RequisitionStatus.None)
            {
                //TODO: get user dept, role, etc
                return(AuthorizationResponse.Authorized());
            }

            return(AuthorizationResponse.NotAuthorized("Invalid status"));
        }
Пример #17
0
        public async Task <AuthorizationResponse> Authorization()
        {
            var re      = Request;
            var headers = re.Headers;

            if (headers.Contains(Constants.Header_ApplicationId) && headers.Contains(Constants.Header_ApplicationSecret))
            {
                var applicationId     = headers.GetValues(Constants.Header_ApplicationId).First();
                var applicationSecret = headers.GetValues(Constants.Header_ApplicationSecret).First();

                try
                {
                    //Get token
                    AuthorizationResponse response =
                        await _applicationService.GetAccessToken(applicationId, applicationSecret);

                    if (response == null)
                    {
                        throw new HttpResponseException(new HttpResponseMessage
                        {
                            StatusCode = HttpStatusCode.Unauthorized,
                            Content    = new StringContent(Constants.HttpResponse_401)
                        });
                    }

                    //Save token in section
                    var saved = await _applicationService.SaveAccessToken(response.AccessToken, applicationId);

                    if (!saved)
                    {
                        throw new HttpResponseException(new HttpResponseMessage
                        {
                            StatusCode = HttpStatusCode.NotAcceptable,
                            Content    = new StringContent(Constants.HttpResponse_406)
                        });
                    }

                    return(response);
                }
                catch (Exception)
                {
                    throw new HttpResponseException(new HttpResponseMessage
                    {
                        StatusCode = HttpStatusCode.InternalServerError,
                        Content    = new StringContent(Constants.HttpResponse_500)
                    });
                }
            }

            throw new HttpResponseException(new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.BadRequest,
                Content    = new StringContent(Constants.HttpResponse_400)
            });
        }
        /// <summary>
        /// Gets the authorization token.
        /// </summary>
        /// <param name="authorizationTokenRequest">The authorization token request.</param>
        /// <returns>AuthorizationResponse.</returns>
        public static AuthorizationResponse GetAuthorizationToken(AuthorizationTokenRequest authorizationTokenRequest)
        {
            var audience           = authorizationTokenRequest.Audience;
            var authenticationBody =
                $"username={authorizationTokenRequest.AuthenticationRequestBody.Username}&password={authorizationTokenRequest.AuthenticationRequestBody.Password}&organisationalUnitAlias={authorizationTokenRequest.AuthenticationRequestBody.OrganisationalUnitAlias}";

            HttpResponseMessage authenticationResponseMessage = null;
            var authenticationUrl = authorizationTokenRequest.AuthenticationUrl;
            AuthenticationResponse authenticationResponse       = null;
            AuthorizationRequest   authorizationRequest         = null;
            HttpResponseMessage    authorizationResponseMessage = null;
            var authorizationUrl = authorizationTokenRequest.AuthorizationUrl;
            var purpose          = authorizationTokenRequest.Purpose;
            var result           = new AuthorizationResponse();

            using (HttpContent content = new StringContent(authenticationBody, Encoding.UTF8))
            {
                content.Headers.Clear();
                content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
                using (var client = new HttpClient())
                {
                    authenticationResponseMessage = client.PostAsync(authenticationUrl, content).Result;
                }
            }

            if (authenticationResponseMessage.IsSuccessStatusCode)
            {
                authenticationResponse = JsonConvert.DeserializeObject <AuthenticationResponse>(
                    authenticationResponseMessage.Content.ReadAsStringAsync().Result);

                authorizationRequest = new AuthorizationRequest()
                {
                    SearchTypeCode = purpose,
                    DataAssetSets  = new string[] { audience }
                };

                using (var content = new StringContent(JsonConvert.SerializeObject(authorizationRequest)))
                {
                    content.Headers.Clear();
                    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    using (var client = new HttpClient())
                    {
                        client.DefaultRequestHeaders.Authorization =
                            new AuthenticationHeaderValue("Bearer", authenticationResponse.AccessToken);
                        authorizationResponseMessage = client.PostAsync(authorizationUrl, content).Result;
                    }
                }

                result = JsonConvert.DeserializeObject <AuthorizationResponse>(authorizationResponseMessage.Content
                                                                               .ReadAsStringAsync().Result);
                result.AccessToken = string.Format("Bearer {0}", result.AccessToken);
            }

            return(result);
        }
Пример #19
0
        /// <summary>
        /// Validates an <see cref="AuthenticationResponse"/>.
        /// </summary>
        /// <param name="authorizationResponse">The <see cref="AuthenticationResponse"/> pararm.</param>
        /// <param name="auth0Domain">The Auth0's tenant domain.</param>
        /// <param name="state">The state used during the authentication flow.</param>
        public static void ValidateAuthorizationResponse(AuthorizationResponse authorizationResponse, string auth0Domain, string state)
        {
            if (string.IsNullOrEmpty(auth0Domain))
            {
                throw new ArgumentException(Resources.NullArgumentExceptionError, nameof(auth0Domain));
            }

            if (authorizationResponse is null)
            {
                throw new ArgumentNullException(nameof(authorizationResponse));
            }

            string errorDescription = null;
            Uri    origin           = new Uri(authorizationResponse.Origin);

            // Validate Origin
            if (authorizationResponse.IsTrusted && origin.Authority != auth0Domain)
            {
                errorDescription = "Invalid Origin";
            }

            // Validate Error
            if (errorDescription == null && !string.IsNullOrEmpty(authorizationResponse.Error))
            {
                switch (authorizationResponse.Error.ToLowerInvariant())
                {
                case "login_required":

                    errorDescription = "Login Required";

                    break;

                case "consent_required":

                    errorDescription = "Consent Required";

                    break;

                default:
                    errorDescription = authorizationResponse.ErrorDescription;
                    break;
                }
            }

            // Validate State
            if (errorDescription == null && !string.IsNullOrEmpty(state) ? state != authorizationResponse.State.Replace(' ', '+') : false)
            {
                errorDescription = "Invalid State";
            }

            if (!string.IsNullOrEmpty(errorDescription))
            {
                throw new AuthenticationException(errorDescription);
            }
        }
Пример #20
0
        public void ParseRealWorldGoogleSuccessResponse()
        {
            string redirectUrl             = "com.example.myapp:/oauth2redirect/?state=AJ7CQLlJEwNn2AVL&code=4/aQHgCtVfeTg--SEAyJ6pYHvcCtZZZZZckvGcT5OpPjNuEEEEcvUJzQSaAALzD_DSfenHwHXItOE2Ax55j25-bbY&scope=https://www.googleapis.com/auth/drive.appdata";
            AuthorizationResponse response = OAuth2Utils.ParseAuthorizationResponseUrl(redirectUrl);

            Assert.IsTrue(response.IsAccessGranted);
            Assert.AreEqual("4/aQHgCtVfeTg--SEAyJ6pYHvcCtZZZZZckvGcT5OpPjNuEEEEcvUJzQSaAALzD_DSfenHwHXItOE2Ax55j25-bbY", response.Code);
            Assert.IsNull(response.Token);
            Assert.AreEqual("AJ7CQLlJEwNn2AVL", response.State);
            Assert.IsNull(response.Error);
        }
        public void ShouldReturnErrorWhenSendAuthorizationTransactionWithNullRequest()
        {
            //Arrange
            AuthorizationRequest authorizationRequestData = null;
            CieloTransaction     authorizationTransaction = new CieloTransaction(TransactionType.Authorization, credentials);
            //Act
            AuthorizationResponse authorizationResponse = (AuthorizationResponse)authorizationTransaction.Execute(authorizationRequestData);

            //Assert
            Assert.AreEqual("Ocorreu um erro na chamada da transação de autorização. Verifique o log de erro para mais detalhes", authorizationResponse.ReturnMessage);
        }
Пример #22
0
        public void ParseRealWorldGoogleRejectResponse()
        {
            string redirectUrl             = "com.example.myapp:/oauth2redirect/?error=access_denied&state=AJ7CQLlJEwNn2AVL";
            AuthorizationResponse response = OAuth2Utils.ParseAuthorizationResponseUrl(redirectUrl);

            Assert.IsFalse(response.IsAccessGranted);
            Assert.IsNull(response.Token);
            Assert.IsNull(response.Code);
            Assert.AreEqual("AJ7CQLlJEwNn2AVL", response.State);
            Assert.AreEqual(AuthorizationResponseError.AccessDenied, response.Error);
        }
Пример #23
0
        public void ParseRealWorldDropboxSuccessResponse()
        {
            string redirectUrl             = "com.example.myapp://oauth2redirect/#access_token=vQGkdNzLZ9AAAAAAApZW8zLyjRRRRRcic2MqEx1A1AdyaPcLdbKKOLNg2I8z0we-&token_type=bearer&state=68D8kUO0ubb78C8k&uid=111111111&account_id=abcd%3AAADucBH8TWrbYMWUHlrWQ4TGdcyC55pzBKk";
            AuthorizationResponse response = OAuth2Utils.ParseAuthorizationResponseUrl(redirectUrl);

            Assert.IsTrue(response.IsAccessGranted);
            Assert.AreEqual("vQGkdNzLZ9AAAAAAApZW8zLyjRRRRRcic2MqEx1A1AdyaPcLdbKKOLNg2I8z0we-", response.Token);
            Assert.IsNull(response.Code);
            Assert.AreEqual("68D8kUO0ubb78C8k", response.State);
            Assert.IsNull(response.Error);
        }
        private IActionResult GetAuthorizationResponse(AccessRequestModel model, IUser user, IComputer computer)
        {
            try
            {
                // Do authorization check first.

                AuthorizationResponse authResponse = this.authorizationService.GetAuthorizationResponse(user, computer, model.RequestType);

                if (!authResponse.IsAuthorized())
                {
                    this.AuditAuthZFailure(model, authResponse, user, computer);
                    model.FailureReason = UIMessages.NotAuthorized;
                    return(this.View("AccessRequest", model));
                }

                // Do actual work only if authorized.
                if (authResponse.EvaluatedAccess == AccessMask.Laps)
                {
                    return(this.GetLapsPassword(model, user, computer, (LapsAuthorizationResponse)authResponse));
                }
                else if (authResponse.EvaluatedAccess == AccessMask.LapsHistory)
                {
                    return(this.GetLapsPasswordHistory(model, user, computer, (LapsHistoryAuthorizationResponse)authResponse));
                }
                else if (authResponse.EvaluatedAccess == AccessMask.Jit)
                {
                    return(this.GrantJitAccess(model, user, computer, (JitAuthorizationResponse)authResponse));
                }
                else
                {
                    throw new AccessManagerException(@"The evaluated access response mask was not supported");
                }
            }
            catch (AuditLogFailureException ex)
            {
                this.logger.LogEventError(EventIDs.AuthZFailedAuditError, string.Format(LogMessages.AuthZFailedAuditError, user.MsDsPrincipalName, model.ComputerName), ex);

                return(this.View("Error", new ErrorModel
                {
                    Heading = UIMessages.AccessDenied,
                    Message = UIMessages.AuthZFailedAuditError
                }));
            }
            catch (Exception ex)
            {
                this.logger.LogEventError(EventIDs.AuthZError, string.Format(LogMessages.AuthZError, user.MsDsPrincipalName, computer.MsDsPrincipalName), ex);

                return(this.View("Error", new ErrorModel
                {
                    Heading = UIMessages.UnableToProcessRequest,
                    Message = UIMessages.AuthZError
                }));
            }
        }
Пример #25
0
        public void Credit(CcDepositRequest depositRequest, AuthorizationResponse response, Action <CcDepositResponse> onFunded)
        {
            if (depositRequest.Currency == "DEM")
            {
                throw new ApplicationException("Are you serious? Deposits in Deutsche Mark are not supported since 2002!");
            }

            Debug.WriteLine(
                $"Funding Customer Account. TransactionId={response.TransactionId} AccountNumber={depositRequest.AccountNumber} Amount={depositRequest.Amount} Currency={depositRequest.Currency}");
            onFunded(new DepositResponseFactory().FromClearingResponse(depositRequest, response));
        }
Пример #26
0
        public void Any_Transaction_Is_Approved()
        {
            _transactions.Add(_declined);
            _transactions.Add(_approved);

            var sut = new AuthorizationResponse();

            sut.Transactions.AddRange(_transactions);

            sut.Approved.ShouldBe(true);
        }
Пример #27
0
        public void All_Transactions_Where_Declined()
        {
            _transactions.Add(_declined);
            _transactions.Add(_declined);

            var sut = new AuthorizationResponse();

            sut.Transactions.AddRange(_transactions);

            sut.Approved.ShouldBe(false);
        }
Пример #28
0
        private async Task AuthorizeAsync(CancellationToken cancellationToken)
        {
            if (_authorizationResponse != null) return;
            _authorizationResponse = null;

            var formContent = new[] {new KeyValuePair<string, string>("grant_type", "client_credentials")};
            var response = await _authorizationService.PostFormAsync<AuthorizationResponse>(ApiCalls.AuthorizationPath, formContent, cancellationToken);

            _libraryService.SetAuthorizationHeader(response.TokenType, response.AccessToken);
            _authorizationResponse = response;
        }
        public void ShouldReturnResponseObjectWithErrorMessageWhenResponseMessageIsIncomplete()
        {
            //Arrange
            string response = new StreamReader(expectedResultPath + "\\AuthorizationResponseIncomplete.json").ReadToEnd();
            AuthorizationTransactionFormatter authFormatter = new AuthorizationTransactionFormatter();
            //Act
            AuthorizationResponse authResponse = authFormatter.ParseMessageToResponse(response);

            //Assert
            Assert.AreEqual("Ocorreu um erro ao formatar a mensagem de resposta na API da Cielo. Verifique o log de erro para mais detalhes", authResponse.ReturnMessage);
        }
Пример #30
0
 async Task <HttpResponseMessage> HandleNoInteraction(
     AuthorizationResponse response)
 {
     // Make NoInteractionHandler handle the case of
     // 'prompt=none'. An implementation of the
     // INoInteractionHandlerSpi interface needs to be given
     // to the constructor of NoInteractionHandler.
     return(await new NoInteractionHandler(
                API, new NoInteractionHandlerSpiImpl(this))
            .Handle(response));
 }
Пример #31
0
        /// <summary>
        /// Is Valid OAuth 2.0 Authorization Response.
        /// </summary>
        public static void Validate(this AuthorizationResponse response, bool isImplicitFlow = false)
        {
            if (response == null)
            {
                throw new ArgumentNullException(nameof(response));
            }

            if (!response.Error.IsNullOrEmpty())
            {
                throw new ResponseErrorException(response.Error, $"{response.GetTypeName()}{(response.ErrorDescription.IsNullOrEmpty() ? string.Empty : $", {response.ErrorDescription}")}.");
            }
Пример #32
0
    private void ServerMessageReceived(NetworkClient senderClient, int messageType, ByteString messageContent)
    {
      Debug.Log("Server message Type={0} Size={1}.", messageType, messageContent.Length);

      switch (messageType) {
        /* Handshake request. */
        case MessageType.ClientHandshakeRequest: {
            HandshakeRequest request = HandshakeRequest.Parser.ParseFrom(messageContent);
            senderClient.UpdatePublicKey(request.Key);

            PublicKey serverPublic = this.ServerKey;
            if (serverPublic == null) {
              Debug.Error("Server public key is invalid.");
              return;
            }

            HandshakeResponse response = new HandshakeResponse();
            response.Key = serverPublic;
            senderClient.SendMessage(MessageType.ClientHandshakeResponse, response);
          }
          break;

        /* Authorization request. */
        case MessageType.AuthorizationRequest: {
            AuthorizationRequest request = AuthorizationRequest.Parser.ParseFrom(messageContent);
            senderClient.Profile.UpdateProfile(request);

            AuthorizationResponse response = new AuthorizationResponse();
            response.ServerName = this.m_serverConfig.ServerName;
            senderClient.SendMessage(MessageType.AuthorizationResponse, response);

            Task.Run(() => {
              ContactUpdate contactUpdate = new ContactUpdate();
              contactUpdate.Add.Add(senderClient.ContactClient);

              foreach (NetworkClient connectedClient in this.m_connectedClients) {
                if (connectedClient.ClientId == senderClient.ClientId) continue;

                Debug.Log("Sending contact update to ClientId={0}.", connectedClient.ClientId);
                connectedClient.SendMessage(MessageType.ContactUpdate, contactUpdate);
              }
            });
          }
          break;

        /* Contact list update. */
        case MessageType.ContactUpdateRequest: {
            ContactUpdateRequest request = ContactUpdateRequest.Parser.ParseFrom(messageContent);
            ContactUpdate contactUpdate = new ContactUpdate();

            List<long> clientList = request.Clients.ToList();
            foreach (NetworkClient connectedClient in this.m_connectedClients) {
              // if (connectedClient.ClientId == senderClient.ClientId) continue;
              if (!connectedClient.Profile.Valid) continue;

              if (clientList.Contains(connectedClient.ClientId)) {
                Debug.Log("Client {0} has got ClientId={1}.", senderClient.ClientId, connectedClient.ClientId);
                clientList.Remove(connectedClient.ClientId);
              }
              else {
                Debug.Log("Client {0} requires ClientId={1}.", senderClient.ClientId, connectedClient.ClientId);
                contactUpdate.Add.Add(connectedClient.ContactClient);
              }
            }

            Debug.Log("Trash clients count={0}.", clientList.Count);
            if (clientList.Count > 0) {
              contactUpdate.Remove.Add(clientList);
            }
            senderClient.SendMessage(MessageType.ContactUpdate, contactUpdate);
          }
          break;

        case MessageType.ContactUpdateChangeRequest: {
            ContactUpdateChangeRequest clientRequestedChange = ContactUpdateChangeRequest.Parser.ParseFrom(messageContent);
            var senderProfile = senderClient.Profile;

            if (senderProfile.Name != clientRequestedChange.Name || senderProfile.Surname != clientRequestedChange.Surname) {
              Debug.Log("Updating client data. This is not implemented on the client side. ;)");
            }
            else if(senderProfile.Status != clientRequestedChange.Online) {
              senderProfile.Status = clientRequestedChange.Online;

              ContactUpdateStatus statusUpdate = new ContactUpdateStatus();
              statusUpdate.Online = clientRequestedChange.Online;
              statusUpdate.ClientId = senderClient.ClientId;

              foreach (NetworkClient connectedClient in this.m_connectedClients) {
                // if (connectedClient.ClientId == senderClient.ClientId) continue;

                Debug.Log("Sending status update to ClientId={0}.", connectedClient.ClientId);
                connectedClient.SendMessage(MessageType.ContactUpdateStatus, statusUpdate);
              }
            }
          }
          break;

        /* Client Public Key request. */
        case MessageType.MessageClientPublicRequest: {
            MessageRequestClientPublic requestMessage = MessageRequestClientPublic.Parser.ParseFrom(messageContent);
            PublicKey responseKey = null;

            foreach (NetworkClient connectedClient in this.m_connectedClients) {
              if (connectedClient.ClientId == requestMessage.ClientId) {
                responseKey = connectedClient.ClientPublic;
              }
            }

            if (responseKey != null) {
              MessageResponseClientPublic responseMessage = new MessageResponseClientPublic();
              responseMessage.ClientId = requestMessage.ClientId;
              responseMessage.Key = responseKey;

              senderClient.SendMessage(MessageType.MessageClientPublicResponse, responseMessage);
            }
            else 
              Debug.Warn("ClientId={0} has invalid public key.");
          }
          break;
      }
    }
Пример #33
0
 /*
  * Get your client_id when registering your app at dev.oyatel.com
  * */
 public Authorize(String client_id, String redirect_uri, AuthorizationResponse callback)
 {
     this.client_id = client_id;
     this.redirect_uri = redirect_uri;
     authorized = callback;
 }