2025-01-13 18:51:26 +00:00
using AIStudio.Tools.Rust ;
2025-02-15 14:41:12 +00:00
namespace AIStudio.Tools.Services ;
2025-01-13 18:51:26 +00:00
public sealed partial class RustService
{
/// <summary>
/// Try to get the API key for the given secret ID.
/// </summary>
/// <param name="secretId">The secret ID to get the API key for.</param>
/// <param name="isTrying">Indicates if we are trying to get the API key. In that case, we don't log errors.</param>
/// <returns>The requested secret.</returns>
public async Task < RequestedSecret > GetAPIKey ( ISecretId secretId , bool isTrying = false )
{
var secretRequest = new SelectSecretRequest ( $"provider::{secretId.SecretId}::{secretId.SecretName}::api_key" , Environment . UserName , isTrying ) ;
var result = await this . http . PostAsJsonAsync ( "/secrets/get" , secretRequest , this . jsonRustSerializerOptions ) ;
if ( ! result . IsSuccessStatusCode )
{
if ( ! isTrying )
2026-01-10 13:31:03 +00:00
this . logger ! . LogError ( $"Failed to get the API key for 'provider::{secretId.SecretId}::{secretId.SecretName}::api_key' due to an API issue: '{result.StatusCode}'" ) ;
2025-05-04 12:59:30 +00:00
return new RequestedSecret ( false , new EncryptedText ( string . Empty ) , TB ( "Failed to get the API key due to an API issue." ) ) ;
2025-01-13 18:51:26 +00:00
}
var secret = await result . Content . ReadFromJsonAsync < RequestedSecret > ( this . jsonRustSerializerOptions ) ;
if ( ! secret . Success & & ! isTrying )
2026-01-10 13:31:03 +00:00
this . logger ! . LogError ( $"Failed to get the API key for 'provider::{secretId.SecretId}::{secretId.SecretName}::api_key': '{secret.Issue}'" ) ;
2025-01-13 18:51:26 +00:00
2026-01-10 13:31:03 +00:00
this . logger ! . LogDebug ( $"Successfully retrieved the API key for 'provider::{secretId.SecretId}::{secretId.SecretName}::api_key'." ) ;
2025-01-13 18:51:26 +00:00
return secret ;
}
/// <summary>
/// Try to store the API key for the given secret ID.
/// </summary>
/// <param name="secretId">The secret ID to store the API key for.</param>
/// <param name="key">The API key to store.</param>
/// <returns>The store secret response.</returns>
public async Task < StoreSecretResponse > SetAPIKey ( ISecretId secretId , string key )
{
var encryptedKey = await this . encryptor ! . Encrypt ( key ) ;
var request = new StoreSecretRequest ( $"provider::{secretId.SecretId}::{secretId.SecretName}::api_key" , Environment . UserName , encryptedKey ) ;
var result = await this . http . PostAsJsonAsync ( "/secrets/store" , request , this . jsonRustSerializerOptions ) ;
if ( ! result . IsSuccessStatusCode )
{
2026-01-10 13:31:03 +00:00
this . logger ! . LogError ( $"Failed to store the API key for 'provider::{secretId.SecretId}::{secretId.SecretName}::api_key' due to an API issue: '{result.StatusCode}'" ) ;
2025-05-04 12:59:30 +00:00
return new StoreSecretResponse ( false , TB ( "Failed to get the API key due to an API issue." ) ) ;
2025-01-13 18:51:26 +00:00
}
var state = await result . Content . ReadFromJsonAsync < StoreSecretResponse > ( this . jsonRustSerializerOptions ) ;
if ( ! state . Success )
2026-01-10 13:31:03 +00:00
this . logger ! . LogError ( $"Failed to store the API key for 'provider::{secretId.SecretId}::{secretId.SecretName}::api_key': '{state.Issue}'" ) ;
2025-01-13 18:51:26 +00:00
2026-01-10 13:31:03 +00:00
this . logger ! . LogDebug ( $"Successfully stored the API key for 'provider::{secretId.SecretId}::{secretId.SecretName}::api_key'." ) ;
2025-01-13 18:51:26 +00:00
return state ;
}
/// <summary>
/// Tries to delete the API key for the given secret ID.
/// </summary>
/// <param name="secretId">The secret ID to delete the API key for.</param>
/// <returns>The delete secret response.</returns>
public async Task < DeleteSecretResponse > DeleteAPIKey ( ISecretId secretId )
{
var request = new SelectSecretRequest ( $"provider::{secretId.SecretId}::{secretId.SecretName}::api_key" , Environment . UserName , false ) ;
var result = await this . http . PostAsJsonAsync ( "/secrets/delete" , request , this . jsonRustSerializerOptions ) ;
if ( ! result . IsSuccessStatusCode )
{
this . logger ! . LogError ( $"Failed to delete the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'" ) ;
2025-05-04 12:59:30 +00:00
return new DeleteSecretResponse { Success = false , WasEntryFound = false , Issue = TB ( "Failed to delete the API key due to an API issue." ) } ;
2025-01-13 18:51:26 +00:00
}
var state = await result . Content . ReadFromJsonAsync < DeleteSecretResponse > ( this . jsonRustSerializerOptions ) ;
if ( ! state . Success )
this . logger ! . LogError ( $"Failed to delete the API key for secret ID '{secretId.SecretId}': '{state.Issue}'" ) ;
return state ;
}
}