Exemple #1
0
        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);
            }
        }
Exemple #2
0
 public void PutApiKey(string name, ApiKeyDefinition apiKeyData)
 {
     AsyncHelpers.RunSync(() => asyncAdminServerClient.PutApiKeyAsync(name, apiKeyData));
 }
Exemple #3
0
        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);
        }