/// <summary>
        /// Creates a sample onboarding request.
        /// </summary>
        /// <returns></returns>
        private OnboardingRequest CreateDefaultOnboardingRequest()
        {
            // 1. Create the onboarding request with participant information
            var onboardingRequest = new OnboardingRequest();

            onboardingRequest.FirstName            = "John";
            onboardingRequest.LastName             = "Doe";
            onboardingRequest.FriendlyName         = "John";
            onboardingRequest.ApplicationPatientId = "johndoe-" + Guid.NewGuid();  // Must be unique
            onboardingRequest.Birthday             = new DateTime(1955, 10, 28);

            // This is a workaround for bug#48405. TODO: Remove once S61 is available.
            onboardingRequest.Height = 155;   //In cm
            onboardingRequest.Weight = 50000; //In g

            // 1a. Specify a patient/provider secret question & answer to validate the identity of the invitee
            onboardingRequest.SecretQuestion = "What color is the sky?";
            onboardingRequest.SecretAnswer   = "The sky is blue"; // Must be at least six characters

            return(onboardingRequest);
        }
예제 #2
0
        private void ProcessOnboarding(OnboardingRequest packet)
        {
            _clientCryptoService.DecodeEcdhTuple(packet.EcdhTuple, packet.TransactionPublicKey, out byte[] blindingFactor, out byte[] assetId, out byte[] issuer, out byte[] payload);
            string sessionKey = payload.ToHexString();

            if (_dataAccessService.GetServiceProviderRegistrationId(_accountId, packet.AssetCommitment, out ulong registrationId))
            {
                _idenitiesHubContext.Clients.Group(sessionKey).SendAsync("PushUserAlreadyRegistered", new ServiceProviderRegistrationDto {
                    ServiceProviderRegistrationId = registrationId.ToString(CultureInfo.InvariantCulture), Commitment = packet.AssetCommitment.ToHexString()
                });
            }
            else
            {
                AttributeType attributeType = _assetsService.GetAttributeType(assetId);

                bool isEligibilityCorrect = CheckEligibilityProofs(packet.AssetCommitment, packet.EligibilityProof, issuer);

                if (!isEligibilityCorrect)
                {
                    _idenitiesHubContext.Clients.Group(sessionKey).SendAsync("PushSpAuthorizationFailed", new { Code = 2, Message = "Eligibility proofs were wrong" }).Wait();
                    return;
                }

                IEnumerable <SpIdenitityValidation> spIdenitityValidations = _dataAccessService.GetSpIdenitityValidations(_accountId);
                if (!CheckSpIdentityValidations(packet.AssetCommitment, packet.AssociatedProofs, spIdenitityValidations, sessionKey))
                {
                    return;
                }

                ulong id = _dataAccessService.AddServiceProviderRegistration(_accountId, packet.AssetCommitment);
                _idenitiesHubContext.Clients.Group(_accountId.ToString(CultureInfo.InvariantCulture)).SendAsync("PushRegistration", new ServiceProviderRegistrationDto {
                    ServiceProviderRegistrationId = id.ToString(CultureInfo.InvariantCulture), Commitment = packet.AssetCommitment.ToHexString()
                });
                _idenitiesHubContext.Clients.Group(sessionKey).SendAsync("PushUserRegistration", new ServiceProviderRegistrationDto {
                    ServiceProviderRegistrationId = id.ToString(CultureInfo.InvariantCulture), Commitment = packet.AssetCommitment.ToHexString()
                });
            }
        }
        /// <summary>
        /// Set up initial user, org and bucket Post an onboarding request to set up initial user, org and bucket.
        /// </summary>
        /// <exception cref="InfluxDB.Client.Api.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="onboardingRequest">Source to create</param>
        /// <param name="zapTraceSpan">OpenTracing span context (optional)</param>
        /// <returns>Task of IRestResponse (OnboardingResponse)</returns>
        public async System.Threading.Tasks.Task <IRestResponse> PostSetupAsyncWithIRestResponse(OnboardingRequest onboardingRequest, string zapTraceSpan = null)
        {
            // verify the required parameter 'onboardingRequest' is set
            if (onboardingRequest == null)
            {
                throw new ApiException(400, "Missing required parameter 'onboardingRequest' when calling SetupService->PostSetup");
            }

            var    localVarPath         = "/api/v2/setup";
            var    localVarPathParams   = new Dictionary <String, String>();
            var    localVarQueryParams  = new List <KeyValuePair <String, String> >();
            var    localVarHeaderParams = new Dictionary <String, String>(this.Configuration.DefaultHeader);
            var    localVarFormParams   = new Dictionary <String, String>();
            var    localVarFileParams   = new Dictionary <String, FileParameter>();
            Object localVarPostBody     = null;

            // to determine the Content-Type header
            String[] localVarHttpContentTypes = new String[] {
                "application/json"
            };
            String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);

            if (zapTraceSpan != null)
            {
                localVarHeaderParams.Add("Zap-Trace-Span", this.Configuration.ApiClient.ParameterToString(zapTraceSpan));                       // header parameter
            }
            if (onboardingRequest != null && onboardingRequest.GetType() != typeof(byte[]))
            {
                localVarPostBody = this.Configuration.ApiClient.Serialize(onboardingRequest); // http body (model) parameter
            }
            else
            {
                localVarPostBody = onboardingRequest; // byte array
            }

            // to determine the Accept header
            String[] localVarHttpHeaderAccepts = new String[] {
                "application/json"
            };

            String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);

            if (localVarHttpHeaderAccept != null && !localVarHeaderParams.ContainsKey("Accept"))
            {
                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);
            }


            // make the HTTP request
            IRestResponse localVarResponse = (IRestResponse)await this.Configuration.ApiClient.CallApiAsync(localVarPath,
                                                                                                            Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
                                                                                                            localVarPathParams, localVarHttpContentType);

            if (ExceptionFactory != null)
            {
                Exception exception = ExceptionFactory("PostSetup", localVarResponse);
                if (exception != null)
                {
                    throw exception;
                }
            }

            return(localVarResponse);
        }
        /// <summary>
        /// Set up initial user, org and bucket Post an onboarding request to set up initial user, org and bucket.
        /// </summary>
        /// <exception cref="InfluxDB.Client.Api.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="onboardingRequest">Source to create</param>
        /// <param name="zapTraceSpan">OpenTracing span context (optional)</param>
        /// <returns>Task of ApiResponse (OnboardingResponse)</returns>
        public async System.Threading.Tasks.Task <ApiResponse <OnboardingResponse> > PostSetupAsyncWithHttpInfo(OnboardingRequest onboardingRequest, string zapTraceSpan = null)
        {
            // make the HTTP request
            IRestResponse localVarResponse = await PostSetupAsyncWithIRestResponse(onboardingRequest, zapTraceSpan);

            int localVarStatusCode = (int)localVarResponse.StatusCode;

            if (ExceptionFactory != null)
            {
                Exception exception = ExceptionFactory("PostSetup", localVarResponse);
                if (exception != null)
                {
                    throw exception;
                }
            }

            return(new ApiResponse <OnboardingResponse>(localVarStatusCode,
                                                        localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()),
                                                        (OnboardingResponse)this.Configuration.ApiClient.Deserialize(localVarResponse, typeof(OnboardingResponse))));
        }
        /// <summary>
        /// Set up initial user, org and bucket Post an onboarding request to set up initial user, org and bucket.
        /// </summary>
        /// <exception cref="InfluxDB.Client.Api.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="onboardingRequest">Source to create</param>
        /// <param name="zapTraceSpan">OpenTracing span context (optional)</param>
        /// <returns>Task of OnboardingResponse</returns>
        public async System.Threading.Tasks.Task <OnboardingResponse> PostSetupAsync(OnboardingRequest onboardingRequest, string zapTraceSpan = null)
        {
            ApiResponse <OnboardingResponse> localVarResponse = await PostSetupAsyncWithHttpInfo(onboardingRequest, zapTraceSpan);

            return(localVarResponse.Data);
        }
        /// <summary>
        /// Set up initial user, org and bucket Post an onboarding request to set up initial user, org and bucket.
        /// </summary>
        /// <exception cref="InfluxDB.Client.Api.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="onboardingRequest">Source to create</param>
        /// <param name="zapTraceSpan">OpenTracing span context (optional)</param>
        /// <returns>OnboardingResponse</returns>
        public OnboardingResponse PostSetup(OnboardingRequest onboardingRequest, string zapTraceSpan = null)
        {
            ApiResponse <OnboardingResponse> localVarResponse = PostSetupWithHttpInfo(onboardingRequest, zapTraceSpan);

            return(localVarResponse.Data);
        }
        /// <summary>
        /// Post onboarding request, to setup initial user, org and bucket.
        /// </summary>
        /// <param name="onboarding">to setup defaults</param>
        /// <exception cref="HttpException">With status code 422 when an onboarding has already been completed</exception>
        /// <returns>defaults for first run</returns>
        public async Task <OnboardingResponse> OnboardingAsync(OnboardingRequest onboarding)
        {
            Arguments.CheckNotNull(onboarding, nameof(onboarding));

            return(await _setupService.PostSetupAsync(onboarding));
        }
        /// <summary>
        /// Onboard a user
        /// </summary>
        /// <param name='onboardingRequest'>
        /// The meta data associated with an onboarding request
        /// </param>
        /// <param name='customHeaders'>
        /// Headers that will be added to request.
        /// </param>
        /// <param name='cancellationToken'>
        /// The cancellation token.
        /// </param>
        /// <exception cref="ErrorResponseException">
        /// Thrown when the operation returned an invalid status code
        /// </exception>
        /// <exception cref="SerializationException">
        /// Thrown when unable to deserialize the response
        /// </exception>
        /// <exception cref="ValidationException">
        /// Thrown when a required parameter is null
        /// </exception>
        /// <exception cref="System.ArgumentNullException">
        /// Thrown when a required parameter is null
        /// </exception>
        /// <return>
        /// A response object containing the response body and response headers.
        /// </return>
        public async Task <HttpOperationResponse <OnboardingResponse> > GenerateInviteCodeWithHttpMessagesAsync(OnboardingRequest onboardingRequest, Dictionary <string, List <string> > customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
        {
            if (onboardingRequest == null)
            {
                throw new ValidationException(ValidationRules.CannotBeNull, "onboardingRequest");
            }
            // Tracing
            bool   _shouldTrace  = ServiceClientTracing.IsEnabled;
            string _invocationId = null;

            if (_shouldTrace)
            {
                _invocationId = ServiceClientTracing.NextInvocationId.ToString();
                Dictionary <string, object> tracingParameters = new Dictionary <string, object>();
                tracingParameters.Add("onboardingRequest", onboardingRequest);
                tracingParameters.Add("cancellationToken", cancellationToken);
                ServiceClientTracing.Enter(_invocationId, this, "GenerateInviteCode", tracingParameters);
            }
            // Construct URL
            var _baseUrl = Client.BaseUri.AbsoluteUri;
            var _url     = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "Onboarding/GenerateInviteCode").ToString();
            // Create HTTP transport objects
            var _httpRequest = new HttpRequestMessage();
            HttpResponseMessage _httpResponse = null;

            _httpRequest.Method     = new HttpMethod("POST");
            _httpRequest.RequestUri = new System.Uri(_url);
            // Set Headers


            if (customHeaders != null)
            {
                foreach (var _header in customHeaders)
                {
                    if (_httpRequest.Headers.Contains(_header.Key))
                    {
                        _httpRequest.Headers.Remove(_header.Key);
                    }
                    _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
                }
            }

            // Serialize Request
            string _requestContent = null;

            if (onboardingRequest != null)
            {
                _requestContent      = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(onboardingRequest, Client.SerializationSettings);
                _httpRequest.Content = new StringContent(_requestContent, System.Text.Encoding.UTF8);
                _httpRequest.Content.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
            }
            // Set Credentials
            if (Client.Credentials != null)
            {
                cancellationToken.ThrowIfCancellationRequested();
                await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false);
            }
            // Send Request
            if (_shouldTrace)
            {
                ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
            }
            cancellationToken.ThrowIfCancellationRequested();
            _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);

            if (_shouldTrace)
            {
                ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
            }
            HttpStatusCode _statusCode = _httpResponse.StatusCode;

            cancellationToken.ThrowIfCancellationRequested();
            string _responseContent = null;

            if ((int)_statusCode != 200)
            {
                var ex = new ErrorResponseException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
                try
                {
                    _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

                    ErrorResponse _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject <ErrorResponse>(_responseContent, Client.DeserializationSettings);
                    if (_errorBody != null)
                    {
                        ex.Body = _errorBody;
                    }
                }
                catch (JsonException)
                {
                    // Ignore the exception
                }
                ex.Request  = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
                ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
                if (_shouldTrace)
                {
                    ServiceClientTracing.Error(_invocationId, ex);
                }
                _httpRequest.Dispose();
                if (_httpResponse != null)
                {
                    _httpResponse.Dispose();
                }
                throw ex;
            }
            // Create Result
            var _result = new HttpOperationResponse <OnboardingResponse>();

            _result.Request  = _httpRequest;
            _result.Response = _httpResponse;
            // Deserialize Response
            if ((int)_statusCode == 200)
            {
                _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

                try
                {
                    _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject <OnboardingResponse>(_responseContent, Client.DeserializationSettings);
                }
                catch (JsonException ex)
                {
                    _httpRequest.Dispose();
                    if (_httpResponse != null)
                    {
                        _httpResponse.Dispose();
                    }
                    throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
                }
            }
            if (_shouldTrace)
            {
                ServiceClientTracing.Exit(_invocationId, _result);
            }
            return(_result);
        }
예제 #9
0
 private static void HandleRtdApproved(OnboardingRequest request)
 {
     //TODO: mark completed
 }
예제 #10
0
 private static void HandleRtdQueued(OnboardingRequest request)
 {
     //TODO: run RTD
 }
예제 #11
0
 private static void HandleReviewCompleted(OnboardingRequest request)
 {
     //TODO: fire off RTD
 }
예제 #12
0
 /// <summary>
 /// Onboard a user
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='onboardingRequest'>
 /// The meta data associated with an onboarding request
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <OnboardingResponse> GenerateInviteCodeAsync(this IOnboarding operations, OnboardingRequest onboardingRequest, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
 {
     using (var _result = await operations.GenerateInviteCodeWithHttpMessagesAsync(onboardingRequest, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
예제 #13
0
 /// <summary>
 /// Onboard a user
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='onboardingRequest'>
 /// The meta data associated with an onboarding request
 /// </param>
 public static OnboardingResponse GenerateInviteCode(this IOnboarding operations, OnboardingRequest onboardingRequest)
 {
     return(operations.GenerateInviteCodeAsync(onboardingRequest).GetAwaiter().GetResult());
 }