Files
sub2api/frontend/src/api/admin/settings.ts

152 lines
3.5 KiB
TypeScript
Raw Normal View History

2025-12-18 13:50:39 +08:00
/**
* Admin Settings API endpoints
* Handles system settings management for administrators
*/
import { apiClient } from '../client'
2025-12-18 13:50:39 +08:00
/**
* System settings interface
*/
export interface SystemSettings {
// Registration settings
registration_enabled: boolean
email_verify_enabled: boolean
2025-12-18 13:50:39 +08:00
// Default settings
default_balance: number
default_concurrency: number
2025-12-18 13:50:39 +08:00
// OEM settings
site_name: string
site_logo: string
site_subtitle: string
api_base_url: string
contact_info: string
doc_url: string
2025-12-18 13:50:39 +08:00
// SMTP settings
smtp_host: string
smtp_port: number
smtp_username: string
smtp_password: string
smtp_from_email: string
smtp_from_name: string
smtp_use_tls: boolean
2025-12-18 13:50:39 +08:00
// Cloudflare Turnstile settings
turnstile_enabled: boolean
turnstile_site_key: string
turnstile_secret_key: string
2025-12-18 13:50:39 +08:00
}
/**
* Get all system settings
* @returns System settings
*/
export async function getSettings(): Promise<SystemSettings> {
const { data } = await apiClient.get<SystemSettings>('/admin/settings')
return data
2025-12-18 13:50:39 +08:00
}
/**
* Update system settings
* @param settings - Partial settings to update
* @returns Updated settings
*/
export async function updateSettings(settings: Partial<SystemSettings>): Promise<SystemSettings> {
const { data } = await apiClient.put<SystemSettings>('/admin/settings', settings)
return data
2025-12-18 13:50:39 +08:00
}
/**
* Test SMTP connection request
*/
export interface TestSmtpRequest {
smtp_host: string
smtp_port: number
smtp_username: string
smtp_password: string
smtp_use_tls: boolean
2025-12-18 13:50:39 +08:00
}
/**
* Test SMTP connection with provided config
* @param config - SMTP configuration to test
* @returns Test result message
*/
export async function testSmtpConnection(config: TestSmtpRequest): Promise<{ message: string }> {
const { data } = await apiClient.post<{ message: string }>('/admin/settings/test-smtp', config)
return data
2025-12-18 13:50:39 +08:00
}
/**
* Send test email request
*/
export interface SendTestEmailRequest {
email: string
smtp_host: string
smtp_port: number
smtp_username: string
smtp_password: string
smtp_from_email: string
smtp_from_name: string
smtp_use_tls: boolean
2025-12-18 13:50:39 +08:00
}
/**
* Send test email with provided SMTP config
* @param request - Email address and SMTP config
* @returns Test result message
*/
export async function sendTestEmail(request: SendTestEmailRequest): Promise<{ message: string }> {
const { data } = await apiClient.post<{ message: string }>(
'/admin/settings/send-test-email',
request
)
return data
2025-12-18 13:50:39 +08:00
}
2025-12-20 15:11:43 +08:00
/**
* Admin API Key status response
*/
export interface AdminApiKeyStatus {
exists: boolean
masked_key: string
2025-12-20 15:11:43 +08:00
}
/**
* Get admin API key status
* @returns Status indicating if key exists and masked version
*/
export async function getAdminApiKey(): Promise<AdminApiKeyStatus> {
const { data } = await apiClient.get<AdminApiKeyStatus>('/admin/settings/admin-api-key')
return data
2025-12-20 15:11:43 +08:00
}
/**
* Regenerate admin API key
* @returns The new full API key (only shown once)
*/
export async function regenerateAdminApiKey(): Promise<{ key: string }> {
const { data } = await apiClient.post<{ key: string }>('/admin/settings/admin-api-key/regenerate')
return data
2025-12-20 15:11:43 +08:00
}
/**
* Delete admin API key
* @returns Success message
*/
export async function deleteAdminApiKey(): Promise<{ message: string }> {
const { data } = await apiClient.delete<{ message: string }>('/admin/settings/admin-api-key')
return data
2025-12-20 15:11:43 +08:00
}
2025-12-18 13:50:39 +08:00
export const settingsAPI = {
getSettings,
updateSettings,
testSmtpConnection,
sendTestEmail,
2025-12-20 15:11:43 +08:00
getAdminApiKey,
regenerateAdminApiKey,
deleteAdminApiKey
}
2025-12-18 13:50:39 +08:00
export default settingsAPI