public static async Task <HttpResponseMessage> UpdateAsync(this Resources.TokenCredential credential,
                                                                   HttpRequestMessage request, UrlHelper url)
        {
            var actorId = credential.Actor.ToGuid();
            //return await request.GetClaims(
            //    async (claims) =>
            //    {
            var claims          = new System.Security.Claims.Claim[] { };
            var context         = request.GetSessionServerContext();
            var creationResults = await context.Credentials.UpdateTokenCredentialAsync(
                credential.Id.UUID, credential.Email, credential.LastEmailSent,
                claims.ToArray(),
                (inviteId, token) => url.GetLocation <Controllers.TokenCredentialController>()
                .SetQueryParam("token", token.ToString("N")),
                () => request.CreateResponse(HttpStatusCode.Accepted),
                () => request.CreateResponse(HttpStatusCode.NotModified),
                () => request.CreateResponse(HttpStatusCode.NotFound)
                .AddReason($"TokenCredential not found"),
                () => request.CreateResponse(HttpStatusCode.ServiceUnavailable),
                (why) => request.CreateResponse(HttpStatusCode.Conflict)
                .AddReason(why));

            return(creationResults);
            //},
            //() => request.CreateResponse(HttpStatusCode.Unauthorized).ToTask(),
            //(why) => request.CreateResponse(HttpStatusCode.InternalServerError).AddReason(why).ToTask());
        }
 public static async Task <HttpResponseMessage> CreateAsync(this Resources.TokenCredential credential,
                                                            HttpRequestMessage request, UrlHelper url)
 {
     return(await request.GetActorIdClaimsAsync(
                async (loggedInActorId, claims) =>
     {
         var credentialId = credential.Id.ToGuid();
         if (!credentialId.HasValue)
         {
             return request.CreateResponse(HttpStatusCode.BadRequest).AddReason("Credential property (an ID) must be specified");
         }
         var actorId = credential.Actor.ToGuid();
         if (!actorId.HasValue)
         {
             return request.CreateResponse(HttpStatusCode.BadRequest).AddReason("Actor property (an ID) must be specified");
         }
         var context = request.GetSessionServerContext();
         var creationResults = await context.Credentials.CreateTokenCredentialAsync(
             credentialId.Value, actorId.Value, credential.Email,
             loggedInActorId, claims,
             (inviteId, token) => url.GetLocation <Controllers.TokenCredentialController>().SetQueryParam("token", token.ToString("N")),
             () => request.CreateResponse(HttpStatusCode.Created),
             () => request.CreateResponse(HttpStatusCode.Conflict)
             .AddReason($"TokenCredential resource with ID [{credentialId.Value}] already exists"),
             (why) => request.CreateResponse(HttpStatusCode.ServiceUnavailable)
             .AddReason(why),
             (why) => request.CreateResponse(HttpStatusCode.Conflict)
             .AddReason(why));
         return creationResults;
     }));
 }