public async Task <IActionResult> Refresh([FromRoute] string structure, [FromRoute] int structureVersion, [FromBody] TemporaryKeyList keys) { try { if (string.IsNullOrWhiteSpace(structure)) { return(BadRequest("structure invalid")); } if (structureVersion < 0) { return(BadRequest("structureVersion invalid")); } if (keys is null) { return(BadRequest("invalid body-data")); } if (keys.Entries is null || !keys.Entries.Any()) { return(BadRequest("no or invalid {Body}.Entries")); } if (keys.Duration == default) { return(BadRequest("no or invalid {Body}.Duration")); } var result = await _keyStore.Extend(MakeTemporaryRegion(structure, structureVersion), keys.Entries.Select(e => e.Key).ToList(), keys.Duration); return(Result(result)); } catch (Exception e) { Logger.LogWarning(e, "could not refresh temporary keys due to an internal error"); return(StatusCode(HttpStatusCode.InternalServerError, "could not refresh temporary keys due to an internal error")); } }
public async Task <IActionResult> Set([FromRoute] string structure, [FromRoute] int structureVersion, [FromBody] TemporaryKeyList keys) { try { if (string.IsNullOrWhiteSpace(structure)) { return(BadRequest("structure invalid")); } if (structureVersion < 0) { return(BadRequest("structureVersion invalid")); } if (keys is null) { return(BadRequest("invalid body-data")); } if (keys.Entries is null || !keys.Entries.Any()) { return(BadRequest("no or invalid {Body}.Entries")); } if (keys.Duration == default) { return(BadRequest("no or invalid {Body}.Duration")); } var result = await _keyStore.Set(MakeTemporaryRegion(structure, structureVersion), keys.Entries.ToDictionary(e => e.Key, e => e.Value), keys.Duration); if (result.IsError) { return(ProviderError(result)); } KnownMetrics.TemporaryKeyCreated.Inc(keys.Entries.Length); await _eventBus.Connect(); await _eventBus.Publish(new EventMessage { Event = new TemporaryKeysAdded { Structure = structure, Version = structureVersion, Values = keys.Entries.ToDictionary(e => e.Key, e => e.Value) }, EventType = nameof(TemporaryKeysAdded) }); return(Result(result)); } catch (Exception e) { Logger.LogWarning(e, "could not store temporary keys due to an internal error"); return(StatusCode(HttpStatusCode.InternalServerError, "could not store temporary key due to an internal error")); } }