Skip to main content

anytype_rpc/
config.rs

1use std::env;
2use std::fs;
3use std::path::{Path, PathBuf};
4
5use serde::Deserialize;
6
7pub use crate::error::ConfigError;
8
9/// Headless CLI config.json fields relevant for gRPC auth.
10#[derive(Debug, Default, Deserialize)]
11pub struct AnytypeHeadlessConfig {
12    #[serde(default, rename = "accountKey")]
13    pub account_key: Option<String>,
14
15    #[serde(default, rename = "sessionToken")]
16    pub session_token: Option<String>,
17
18    #[serde(default, rename = "accountId")]
19    pub account_id: Option<String>,
20}
21
22pub fn default_headless_config_path() -> Result<PathBuf, ConfigError> {
23    let home = env::var("HOME").map_err(|_| ConfigError::MissingHome)?;
24    Ok(PathBuf::from(home).join(".anytype").join("config.json"))
25}
26
27/// load configuration file generated by the headless server.
28/// Data from this file can be used to generate a grpc auth token
29pub fn load_headless_config(
30    path: Option<&Path>,
31) -> Result<Option<AnytypeHeadlessConfig>, ConfigError> {
32    let path = match path {
33        Some(path) => path.to_path_buf(),
34        None => default_headless_config_path()?,
35    };
36
37    if !path.exists() {
38        return Ok(None);
39    }
40
41    let content = fs::read_to_string(&path)?;
42    let config = serde_json::from_str(&content)?;
43    Ok(Some(config))
44}