public async Task PutApiKeyAsync(string name, ApiKeyDefinition apiKeyData, CancellationToken token = default(CancellationToken)) { using (var request = adminRequest.CreatePutApiKeyRequest(name)) { await request.WriteAsync(RavenJObject.FromObject(apiKeyData)) .WithCancellation(token) .ConfigureAwait(false); await request.ReadResponseJsonAsync().WithCancellation(token).ConfigureAwait(false); } }
public void PutApiKey(string name, ApiKeyDefinition apiKeyData) { AsyncHelpers.RunSync(() => asyncAdminServerClient.PutApiKeyAsync(name, apiKeyData)); }
private Task ValidateApiKeyStructure(string name, BlittableJsonReaderObject apiKey) { if (name.Contains("/")) { HttpContext.Response.StatusCode = 400; return(HttpContext.Response.WriteAsync("'name' query string should not contain '/' separator")); } ApiKeyDefinition testStructureOfApiKey = new ApiKeyDefinition(); if (apiKey.TryGet("Enabled", out testStructureOfApiKey.Enabled) == false) { HttpContext.Response.StatusCode = 400; return(HttpContext.Response.WriteAsync("'ApiKey' must include 'Enabled' property")); } if (apiKey.TryGet("Secret", out testStructureOfApiKey.Secret) == false) { HttpContext.Response.StatusCode = 400; return(HttpContext.Response.WriteAsync("'ApiKey' must include 'Secret' property")); } if (string.IsNullOrEmpty(testStructureOfApiKey.Secret)) { HttpContext.Response.StatusCode = 400; return(HttpContext.Response.WriteAsync("'ApiKey' must include non-empty 'Secret' property")); } if (testStructureOfApiKey.Secret.Contains("/")) { HttpContext.Response.StatusCode = 400; return(HttpContext.Response.WriteAsync("'Secret' string should not contain '/' separator")); } if (apiKey.TryGet("ServerAdmin", out testStructureOfApiKey.ServerAdmin) == false) { HttpContext.Response.StatusCode = 400; return(HttpContext.Response.WriteAsync("'ApiKey' must include 'ServerAdmin' property")); } BlittableJsonReaderObject accessMode; if (apiKey.TryGet("ResourcesAccessMode", out accessMode) == false) { HttpContext.Response.StatusCode = 400; return(HttpContext.Response.WriteAsync("'ApiKey' must include 'ResourcesAccessMode' property")); } var prop = new BlittableJsonReaderObject.PropertyDetails(); for (var i = 0; i < accessMode.Count; i++) { accessMode.GetPropertyByIndex(i, ref prop); string accessValue; if (accessMode.TryGet(prop.Name, out accessValue) == false) { HttpContext.Response.StatusCode = 400; return(HttpContext.Response.WriteAsync($"Missing value of dbName -'{prop.Name}' property")); } if (string.IsNullOrEmpty(accessValue)) { HttpContext.Response.StatusCode = 400; return(HttpContext.Response.WriteAsync("'ApiKey' must include non-empty 'AccessMode' DB Name' property")); } AccessModes mode; if (Enum.TryParse(accessValue, out mode) == false) { HttpContext.Response.StatusCode = 400; return (HttpContext.Response.WriteAsync( $"Invalid value of dbName -'{prop.Name}' property, cannot understand: {accessValue}")); } } return(null); }