read meta table

This commit is contained in:
naskya 2024-06-20 09:08:01 +09:00
parent 43245624b1
commit 90fd380f70
Signed by: naskya
GPG key ID: 712D413B3A9FED5C

View file

@ -1,5 +1,7 @@
//! `config migrate 20240701` subcommand
#![allow(clippy::type_complexity)]
use sqlx::{postgres::PgConnectOptions, ConnectOptions};
use std::{collections::HashMap, env, fs, io::Read};
use yaml_rust::{Yaml, YamlLoader};
@ -64,6 +66,7 @@ fn read_default_yml() -> Result<HashMap<String, Yaml>, ReadYamlConfigError> {
Ok(res)
}
#[derive(Debug)]
struct Meta {
name: Option<String>,
description: Option<String>,
@ -79,14 +82,14 @@ struct Meta {
enable_recaptcha: bool,
recaptcha_site_key: Option<String>,
recaptcha_secret_key: Option<String>,
local_drive_capacity_mb: u64,
remote_drive_capacity_mb: u64,
local_drive_capacity_mb: i32,
remote_drive_capacity_mb: i32,
summaly_proxy: Option<String>,
enable_email: bool,
email: Option<String>,
smtp_secure: bool,
smtp_host: Option<String>,
smtp_port: Option<u16>,
smtp_port: Option<i32>,
smtp_user: Option<String>,
smtp_pass: Option<String>,
enable_service_worker: bool,
@ -104,12 +107,12 @@ struct Meta {
object_storage_region: Option<String>,
object_storage_access_key: Option<String>,
object_storage_secret_key: Option<String>,
object_storage_port: u16,
object_storage_port: Option<i32>,
object_storage_use_ssl: bool,
object_storage_set_public_read: bool,
object_storage_s3_force_path_style: bool,
proxy_account_id: String,
object_storage_use_proxy: bool,
proxy_account_id: Option<String>,
enable_hcaptcha: bool,
hcaptcha_site_key: Option<String>,
hcaptcha_secret_key: Option<String>,
@ -139,7 +142,8 @@ struct Meta {
enable_identicon_generation: bool,
donation_link: Option<String>,
mark_local_files_nsfw_by_default: bool,
antenna_limit: u8,
antenna_limit: i32,
// TODO:
// more_urls: jsonb
// experimental_features: jsonb
}
@ -150,7 +154,7 @@ async fn read_meta_table(
username: &str,
password: &str,
database: &str,
) -> Result<(), sqlx::Error> {
) -> Result<Meta, sqlx::Error> {
let mut conn = PgConnectOptions::new()
.host(host)
.port(port)
@ -160,14 +164,368 @@ async fn read_meta_table(
.connect()
.await?;
let (disable_local_timeline,): (bool,) =
sqlx::query_as(r#"SELECT "disableLocalTimeline" FROM "meta""#)
let (
name,
description,
maintainer_name,
maintainer_email,
disable_registration,
disable_local_timeline,
disable_global_timeline,
banner_url,
error_image_url,
icon_url,
cache_remote_files,
enable_recaptcha,
recaptcha_site_key,
recaptcha_secret_key,
local_drive_capacity_mb,
): (
Option<String>,
Option<String>,
Option<String>,
Option<String>,
bool,
bool,
bool,
Option<String>,
Option<String>,
Option<String>,
bool,
bool,
Option<String>,
Option<String>,
i32,
) = sqlx::query_as(
r#"
SELECT
"name",
"description",
"maintainerName",
"maintainerEmail",
"disableRegistration",
"disableLocalTimeline",
"disableGlobalTimeline",
"bannerUrl",
"errorImageUrl",
"iconUrl",
"cacheRemoteFiles",
"enableRecaptcha",
"recaptchaSiteKey",
"recaptchaSecretKey",
"localDriveCapacityMb"
FROM
"meta"
"#,
)
.fetch_one(&mut conn)
.await?;
println!("enable_local_timeline: {}", !disable_local_timeline);
let (
remote_drive_capacity_mb,
summaly_proxy,
enable_email,
email,
smtp_secure,
smtp_host,
smtp_port,
smtp_user,
smtp_pass,
enable_service_worker,
sw_public_key,
sw_private_key,
pinned_users,
tos_url,
repository_url,
): (
i32,
Option<String>,
bool,
Option<String>,
bool,
Option<String>,
Option<i32>,
Option<String>,
Option<String>,
bool,
Option<String>,
Option<String>,
Vec<String>,
Option<String>,
String,
) = sqlx::query_as(
r#"
SELECT
"remoteDriveCapacityMb",
"summalyProxy",
"enableEmail",
"email",
"smtpSecure",
"smtpHost",
"smtpPort",
"smtpUser",
"smtpPass",
"enableServiceWorker",
"swPublicKey",
"swPrivateKey",
"pinnedUsers",
"tosUrl",
"repositoryUrl"
FROM
"meta"
"#,
)
.fetch_one(&mut conn)
.await?;
Ok(())
let (
feedback_url,
use_object_storage,
object_storage_bucket,
object_storage_prefix,
object_storage_base_url,
object_storage_endpoint,
object_storage_region,
object_storage_access_key,
object_storage_secret_key,
object_storage_port,
object_storage_use_ssl,
object_storage_set_public_read,
object_storage_s3_force_path_style,
object_storage_use_proxy,
proxy_account_id,
): (
Option<String>,
bool,
Option<String>,
Option<String>,
Option<String>,
Option<String>,
Option<String>,
Option<String>,
Option<String>,
Option<i32>,
bool,
bool,
bool,
bool,
Option<String>,
) = sqlx::query_as(
r#"
SELECT
"feedbackUrl",
"useObjectStorage",
"objectStorageBucket",
"objectStoragePrefix",
"objectStorageBaseUrl",
"objectStorageEndpoint",
"objectStorageRegion",
"objectStorageAccessKey",
"objectStorageSecretKey",
"objectStoragePort",
"objectStorageUseSsl",
"objectStorageSetPublicRead",
"objectStorageS3ForcePathStyle",
"objectStorageUseProxy",
"proxyAccountId"
FROM
"meta"
"#,
)
.fetch_one(&mut conn)
.await?;
let (
enable_hcaptcha,
hcaptcha_site_key,
hcaptcha_secret_key,
background_image_url,
logo_image_url,
pinned_clip_id,
allowed_hosts,
secure_mode,
private_mode,
deepl_auth_key,
deepl_is_pro,
email_required_for_signup,
theme_color,
default_light_theme,
default_dark_theme,
): (
bool,
Option<String>,
Option<String>,
Option<String>,
Option<String>,
Option<String>,
Vec<String>,
bool,
bool,
Option<String>,
bool,
bool,
Option<String>,
Option<String>,
Option<String>,
) = sqlx::query_as(
r#"
SELECT
"enableHcaptcha",
"hcaptchaSiteKey",
"hcaptchaSecretKey",
"backgroundImageUrl",
"logoImageUrl",
"pinnedClipId",
"allowedHosts",
"secureMode",
"privateMode",
"deeplAuthKey",
"deeplIsPro",
"emailRequiredForSignup",
"themeColor",
"defaultLightTheme",
"defaultDarkTheme"
FROM
"meta"
"#,
)
.fetch_one(&mut conn)
.await?;
let (
enable_ip_logging,
enable_active_email_validation,
custom_motd,
custom_splash_icons,
disable_recommended_timeline,
recommended_instances,
enable_guest_timeline,
default_reaction,
libre_translate_api_url,
libre_translate_api_key,
enable_server_machine_stats,
enable_identicon_generation,
donation_link,
mark_local_files_nsfw_by_default,
antenna_limit,
): (
bool,
bool,
Vec<String>,
Vec<String>,
bool,
Vec<String>,
bool,
String,
Option<String>,
Option<String>,
bool,
bool,
Option<String>,
bool,
i32,
) = sqlx::query_as(
r#"
SELECT
"enableIpLogging",
"enableActiveEmailValidation",
"customMotd",
"customSplashIcons",
"disableRecommendedTimeline",
"recommendedInstances",
"enableGuestTimeline",
"defaultReaction",
"libreTranslateApiUrl",
"libreTranslateApiKey",
"enableServerMachineStats",
"enableIdenticonGeneration",
"donationLink",
"markLocalFilesNsfwByDefault",
"antennaLimit"
FROM
"meta"
"#,
)
.fetch_one(&mut conn)
.await?;
Ok(Meta {
name,
description,
maintainer_name,
maintainer_email,
disable_registration,
disable_local_timeline,
disable_global_timeline,
banner_url,
error_image_url,
icon_url,
cache_remote_files,
enable_recaptcha,
recaptcha_site_key,
recaptcha_secret_key,
local_drive_capacity_mb,
remote_drive_capacity_mb,
summaly_proxy,
enable_email,
email,
smtp_secure,
smtp_host,
smtp_port,
smtp_user,
smtp_pass,
enable_service_worker,
sw_public_key,
sw_private_key,
pinned_users,
tos_url,
repository_url,
feedback_url,
use_object_storage,
object_storage_bucket,
object_storage_prefix,
object_storage_base_url,
object_storage_endpoint,
object_storage_region,
object_storage_access_key,
object_storage_secret_key,
object_storage_port,
object_storage_use_ssl,
object_storage_set_public_read,
object_storage_s3_force_path_style,
object_storage_use_proxy,
proxy_account_id,
enable_hcaptcha,
hcaptcha_site_key,
hcaptcha_secret_key,
background_image_url,
logo_image_url,
pinned_clip_id,
allowed_hosts,
secure_mode,
private_mode,
deepl_auth_key,
deepl_is_pro,
email_required_for_signup,
theme_color,
default_light_theme,
default_dark_theme,
enable_ip_logging,
enable_active_email_validation,
custom_motd,
custom_splash_icons,
disable_recommended_timeline,
recommended_instances,
enable_guest_timeline,
default_reaction,
libre_translate_api_url,
libre_translate_api_key,
enable_server_machine_stats,
enable_identicon_generation,
donation_link,
mark_local_files_nsfw_by_default,
antenna_limit,
})
}
pub(super) async fn run() -> Result<(), Error> {
@ -177,7 +535,7 @@ pub(super) async fn run() -> Result<(), Error> {
println!("{}:\n {:?}", k, v);
}
read_meta_table(
let meta = read_meta_table(
old_config["db"]["host"].as_str().unwrap(),
old_config["db"]["port"].as_i64().unwrap() as u16,
old_config["db"]["user"].as_str().unwrap(),
@ -186,5 +544,7 @@ pub(super) async fn run() -> Result<(), Error> {
)
.await?;
println!("Meta: {:#?}", meta);
Ok(())
}