public void SaveAndGetUserRequest()
        {
            string namespaces = "cid";
            string identifier = "1234";
            NDIDCallbackRequestModel request = new NDIDCallbackRequestModel();

            request.RequestId      = "8707fa402ae174737a5a6cefa7e8d47b836f40fdae7f2b53297ceecda27f3b7c";
            request.RequestMsg     = "dummy Request Message";
            request.RequestMsgHash = "wl4+u6caNoCDb5nr2JPuYGmeIGZjRECCQAicomlJ38E=";
            request.Namespace      = namespaces;
            request.Identifier     = identifier;
            _db.SaveUserRequest(namespaces, identifier, request.RequestId, request);
            NDIDCallbackRequestModel actual_request = _db.GetUserRequest(namespaces, identifier, request.RequestId);

            actual_request.Should().BeEquivalentTo <NDIDCallbackRequestModel>(request);
        }
Ejemplo n.º 2
0
        public async Task CreateIDPResponse(string namespaces, string identifier, string requestId, string status)
        {
            // get user from parameter
            NDIDUserModel user = _db.FindUser(namespaces, identifier);

            if (user == null)
            {
                throw new ApplicationException();
            }
            // get request
            NDIDCallbackRequestModel request = _db.GetUserRequest(namespaces, identifier, requestId);

            if (request == null)
            {
                throw new ApplicationException();
            }
            // get key and sign message
            // always use first accessor keu for simplicity
            string keyName   = namespaces + "-" + identifier + "-" + "0";
            string signature = await _dpki.Sign(keyName, request.RequestMsgHash);

            // construct idp response model
            NDIDIDPResponseModel model = new NDIDIDPResponseModel();

            model.ReferenceId = Guid.NewGuid().ToString();
            model.RequestId   = request.RequestId;
            model.CallbackUrl = new Uri(new Uri(_config.GetCallbackPath()), "api/callback/response").ToString();
            model.NameSpace   = user.NameSpace;
            model.Identifier  = user.Identifier;
            model.AccessorId  = user.Accessors[0].AccessorId;
            model.Secret      = user.Accessors[0].Secret;
            model.Signature   = signature;
            model.Status      = status;
            model.IAL         = 2.3m;
            model.AAL         = 3.0m;
            // call ndid api
            using (HttpClient client = new HttpClient())
            {
                Uri url = new Uri(_apiServerAddress + "/v2/idp/response");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(
                    new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                string        jsonContent = JsonConvert.SerializeObject(model);
                StringContent content     = new StringContent(jsonContent, Encoding.UTF8, "application/json");
                var           result      = client.PostAsync(url, content).Result;
                string        resultJson  = await result.Content.ReadAsStringAsync();

                if (!result.IsSuccessStatusCode)
                {
                    NDIDCallbackRequestModel err = JsonConvert.DeserializeObject <NDIDCallbackRequestModel>(resultJson);
                    if (err.Error.Code == "20025" || err.Error.Code == "20026")
                    {
                        _db.RemoveUserRequest(model.RequestId);
                        throw new ApplicationException("remove");
                    }
                    else
                    {
                        throw new ApplicationException(err.Error.Message);
                    }
                }
            }
        }