read a value from meta table
This commit is contained in:
parent
1b281d7b36
commit
ad6b7d0c1b
7 changed files with 1376 additions and 197 deletions
|
@ -1,181 +1,16 @@
|
|||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
# Firefish configuration
|
||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
# After starting your server, please don't change the URL! Doing so will break federation.
|
||||
|
||||
# ┌─────┐
|
||||
#───┘ URL └─────────────────────────────────────────────────────
|
||||
|
||||
# Final accessible URL seen by a user.
|
||||
url: https://example.com/
|
||||
|
||||
# ┌───────────────────────┐
|
||||
#───┘ Port and TLS settings └───────────────────────────────────
|
||||
|
||||
#
|
||||
# Firefish requires a reverse proxy to support HTTPS connections.
|
||||
#
|
||||
# +----- https://example.com/ ------------+
|
||||
# +------+ |+-------------+ +----------------+|
|
||||
# | User | ---> || Proxy (443) | ---> | Firefish (3000) ||
|
||||
# +------+ |+-------------+ +----------------+|
|
||||
# +---------------------------------------+
|
||||
#
|
||||
# You need to set up a reverse proxy. (e.g. nginx, caddy)
|
||||
# An encrypted connection with HTTPS is highly recommended
|
||||
# because tokens may be transferred in GET requests.
|
||||
|
||||
# The port that your Firefish server should listen on.
|
||||
port: 3000
|
||||
|
||||
# The bind host your Firefish server should listen on.
|
||||
# If unspecified, the wildcard address will be used.
|
||||
bind: 127.0.0.1
|
||||
|
||||
# ┌──────────────────────────┐
|
||||
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||
url: http://localhost:3030
|
||||
port: 3030
|
||||
|
||||
db:
|
||||
host: localhost
|
||||
port: 5432
|
||||
#ssl: false
|
||||
# Database name
|
||||
db: firefish_db
|
||||
port: 25432
|
||||
|
||||
# Auth
|
||||
db: firefish_db
|
||||
user: firefish
|
||||
pass: password
|
||||
|
||||
# Whether disable Caching queries
|
||||
#disableCache: true
|
||||
|
||||
# Extra Connection options
|
||||
#extra:
|
||||
# ssl:
|
||||
# host: localhost
|
||||
# rejectUnauthorized: false
|
||||
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Redis configuration └─────────────────────────────────────
|
||||
|
||||
redis:
|
||||
host: localhost
|
||||
port: 6379
|
||||
#tls:
|
||||
# host: localhost
|
||||
# rejectUnauthorized: false
|
||||
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
#pass: example-pass
|
||||
#prefix: example-prefix
|
||||
#db: 1
|
||||
#user: default
|
||||
port: 26379
|
||||
|
||||
# ┌─────────────────────────────┐
|
||||
#───┘ Cache server configuration └─────────────────────────────────────
|
||||
|
||||
# A Redis-compatible server (DragonflyDB, Keydb, Redis) for caching
|
||||
# If left blank, it will use the Redis server from above
|
||||
|
||||
#cacheServer:
|
||||
#host: localhost
|
||||
#port: 6379
|
||||
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
||||
#pass: example-pass
|
||||
#prefix: example-prefix
|
||||
#db: 1
|
||||
|
||||
# ┌───────────────┐
|
||||
#───┘ ID generation └───────────────────────────────────────────
|
||||
|
||||
# No need to uncomment in most cases, but you may want to change
|
||||
# these settings if you plan to run a large and/or distributed server.
|
||||
|
||||
cuid:
|
||||
# Min 16, Max 24
|
||||
length: 16
|
||||
# # Set this to a unique string across workers (e.g., machine's hostname)
|
||||
# # if your workers are running in multiple hosts.
|
||||
fingerprint: my-fingerprint
|
||||
|
||||
|
||||
# ┌─────────────────────┐
|
||||
#───┘ Other configuration └─────────────────────────────────────
|
||||
|
||||
# Maximum length of a post (default 3000, max 100000)
|
||||
maxNoteLength: 3000
|
||||
|
||||
# Maximum length of an image caption (default 1500, max 8192)
|
||||
maxCaptionLength: 1500
|
||||
|
||||
# Reserved usernames that only the administrator can register with
|
||||
reservedUsernames: [
|
||||
'root',
|
||||
'admin',
|
||||
'administrator',
|
||||
'me',
|
||||
'system'
|
||||
]
|
||||
|
||||
# Whether disable HSTS
|
||||
#disableHsts: true
|
||||
|
||||
# Number of worker processes by type.
|
||||
# The sum must not exceed the number of available cores.
|
||||
clusterLimits:
|
||||
web: 1
|
||||
queue: 1
|
||||
|
||||
# Job concurrency per worker
|
||||
deliverJobConcurrency: 128
|
||||
inboxJobConcurrency: 16
|
||||
|
||||
# Job rate limiter
|
||||
deliverJobPerSec: 128
|
||||
inboxJobPerSec: 16
|
||||
|
||||
# Job attempts
|
||||
deliverJobMaxAttempts: 12
|
||||
inboxJobMaxAttempts: 8
|
||||
|
||||
# Local address used for outgoing requests
|
||||
outgoingAddress: 127.0.0.1
|
||||
|
||||
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
||||
outgoingAddressFamily: ipv4
|
||||
|
||||
# Log level (error, warning, info, debug, trace)
|
||||
# Production env: info
|
||||
# Production env whose storage space or IO is tight: warning
|
||||
# Debug/Test env or Troubleshooting: debug (or trace)
|
||||
maxLogLevel: info
|
||||
|
||||
# Syslog option
|
||||
#syslog:
|
||||
# host: localhost
|
||||
# port: 514
|
||||
|
||||
# Proxy for HTTP/HTTPS
|
||||
proxy: http://127.0.0.1:3128
|
||||
|
||||
proxyBypassHosts: [
|
||||
'web.kaiteki.app',
|
||||
'example.com',
|
||||
'192.0.2.8'
|
||||
]
|
||||
|
||||
# Proxy for SMTP/SMTPS
|
||||
proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5
|
||||
|
||||
# Media Proxy
|
||||
mediaProxy: https://example.com/proxy
|
||||
|
||||
# Proxy remote files (default: true)
|
||||
proxyRemoteFiles: true
|
||||
|
||||
allowedPrivateNetworks: [
|
||||
'127.0.0.1/32'
|
||||
]
|
||||
|
||||
# Upload or download file size limits (bytes)
|
||||
maxFileSize: 262144000
|
||||
maxLogLevel: 'debug'
|
||||
|
|
1319
Cargo.lock
generated
1319
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -10,6 +10,8 @@ clap = { version = "4.5", features = ["derive"] }
|
|||
color-print = "0.3"
|
||||
thiserror = "1.0"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
sqlx = { version = "0.7", features = ["runtime-tokio", "postgres"] }
|
||||
tokio = { version = "1.38", features = ["full"] }
|
||||
toml = "0.8"
|
||||
validator = { version = "0.18", features = ["derive"] }
|
||||
yaml-rust = "0.4"
|
||||
|
|
|
@ -26,9 +26,9 @@ pub(crate) enum Error {
|
|||
Validate(#[from] validate::ConfigValidateError),
|
||||
}
|
||||
|
||||
pub(crate) fn run(command: Commands) -> Result<(), Error> {
|
||||
pub(crate) async fn run(command: Commands) -> Result<(), Error> {
|
||||
match command {
|
||||
Commands::Migrate { version } => migrate::run(version)?,
|
||||
Commands::Migrate { version } => migrate::run(version).await?,
|
||||
Commands::Validate => validate::run()?,
|
||||
}
|
||||
|
||||
|
|
|
@ -4,13 +4,13 @@ use super::ConfigVersion;
|
|||
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
pub(crate) enum ConfigMigrateError {
|
||||
#[error("failed to parse the old config file (.config/default.yml)")]
|
||||
ReadOldConfig(#[from] v20240701::ReadYamlConfigError),
|
||||
#[error(transparent)]
|
||||
V20240701(#[from] v20240701::Error),
|
||||
}
|
||||
|
||||
pub(super) fn run(version: ConfigVersion) -> Result<(), ConfigMigrateError> {
|
||||
pub(super) async fn run(version: ConfigVersion) -> Result<(), ConfigMigrateError> {
|
||||
match version {
|
||||
ConfigVersion::V20240701 => v20240701::run()?,
|
||||
ConfigVersion::V20240701 => v20240701::run().await?,
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
@ -1,6 +1,15 @@
|
|||
use sqlx::{postgres::PgConnectOptions, ConnectOptions};
|
||||
use std::{collections::HashMap, env, fs, io::Read};
|
||||
use yaml_rust::{Yaml, YamlLoader};
|
||||
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
pub(crate) enum Error {
|
||||
#[error("failed to parse the old config file (.config/default.yml)")]
|
||||
ReadYaml(#[from] ReadYamlConfigError),
|
||||
#[error("failed to read the meta table")]
|
||||
ReadMeta(#[from] sqlx::Error),
|
||||
}
|
||||
|
||||
#[derive(thiserror::Error, Debug)]
|
||||
pub(crate) enum ReadYamlConfigError {
|
||||
#[error(transparent)]
|
||||
|
@ -53,12 +62,47 @@ fn read_default_yml() -> Result<HashMap<String, Yaml>, ReadYamlConfigError> {
|
|||
Ok(res)
|
||||
}
|
||||
|
||||
pub(super) fn run() -> Result<(), ReadYamlConfigError> {
|
||||
let old_config = read_default_yml()?;
|
||||
async fn read_meta_table(
|
||||
host: &str,
|
||||
port: u16,
|
||||
username: &str,
|
||||
password: &str,
|
||||
database: &str,
|
||||
) -> Result<(), sqlx::Error> {
|
||||
let mut conn = PgConnectOptions::new()
|
||||
.host(host)
|
||||
.port(port)
|
||||
.username(username)
|
||||
.password(password)
|
||||
.database(database)
|
||||
.connect()
|
||||
.await?;
|
||||
|
||||
for (k, v) in old_config {
|
||||
println!("{}:\n {:?}", k, v);
|
||||
}
|
||||
let (disable_local_timeline,): (bool,) =
|
||||
sqlx::query_as(r#"SELECT "disableLocalTimeline" FROM "meta""#)
|
||||
.fetch_one(&mut conn)
|
||||
.await?;
|
||||
|
||||
println!("enable_local_timeline: {}", !disable_local_timeline);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(super) async fn run() -> Result<(), Error> {
|
||||
let old_config = read_default_yml()?;
|
||||
|
||||
for (k, v) in &old_config {
|
||||
println!("{}:\n {:?}", k, v);
|
||||
}
|
||||
|
||||
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(),
|
||||
old_config["db"]["pass"].as_str().unwrap(),
|
||||
old_config["db"]["db"].as_str().unwrap(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -20,19 +20,20 @@ enum Commands {
|
|||
Config(command::config::Commands),
|
||||
}
|
||||
|
||||
fn run() -> Result<(), command::Error> {
|
||||
async fn run() -> Result<(), command::Error> {
|
||||
let args = Args::parse();
|
||||
|
||||
match args.command {
|
||||
Commands::Version => command::version::run(),
|
||||
Commands::Config(subcommand) => command::config::run(subcommand)?,
|
||||
Commands::Config(subcommand) => command::config::run(subcommand).await?,
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let res = run();
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
let res = run().await;
|
||||
|
||||
if let Err(err) = res {
|
||||
println!("An error occurred!");
|
||||
|
|
Loading…
Reference in a new issue