summaryrefslogtreecommitdiffstats
path: root/server/src/api/site.rs
diff options
context:
space:
mode:
authorFelix <me@nutomic.com>2020-03-26 15:23:15 +0100
committerFelix <me@nutomic.com>2020-03-29 00:13:13 +0100
commit76bf71162ef187d2d363b29faa40d24fecdfba3b (patch)
tree3782f744f8bf81342f7863b4d0d03e029c0270ea /server/src/api/site.rs
parent807f33f74823b427bbac5e48caf29e805ce4e656 (diff)
Automatic instance setup based on config variables (fixes #404)
Diffstat (limited to 'server/src/api/site.rs')
-rw-r--r--server/src/api/site.rs48
1 files changed, 38 insertions, 10 deletions
diff --git a/server/src/api/site.rs b/server/src/api/site.rs
index ef1a2828..6bd90149 100644
--- a/server/src/api/site.rs
+++ b/server/src/api/site.rs
@@ -1,5 +1,9 @@
use super::*;
+use crate::api::user::Register;
+use crate::api::{Oper, Perform};
+use crate::settings::Settings;
use diesel::PgConnection;
+use log::info;
use std::str::FromStr;
#[derive(Serialize, Deserialize)]
@@ -53,12 +57,12 @@ pub struct GetModlogResponse {
#[derive(Serialize, Deserialize)]
pub struct CreateSite {
- name: String,
- description: Option<String>,
- enable_downvotes: bool,
- open_registration: bool,
- enable_nsfw: bool,
- auth: String,
+ pub name: String,
+ pub description: Option<String>,
+ pub enable_downvotes: bool,
+ pub open_registration: bool,
+ pub enable_nsfw: bool,
+ pub auth: String,
}
#[derive(Serialize, Deserialize)]
@@ -277,10 +281,34 @@ impl Perform<GetSiteResponse> for Oper<GetSite> {
fn perform(&self, conn: &PgConnection) -> Result<GetSiteResponse, Error> {
let _data: &GetSite = &self.data;
- // It can return a null site in order to redirect
- let site_view = match Site::read(&conn, 1) {
- Ok(_site) => Some(SiteView::read(&conn)?),
- Err(_e) => None,
+ let site = Site::read(&conn, 1);
+ let site_view = if site.is_ok() {
+ Some(SiteView::read(&conn)?)
+ } else if let Some(setup) = Settings::get().setup.as_ref() {
+ let register = Register {
+ username: setup.admin_username.to_owned(),
+ email: setup.admin_email.to_owned(),
+ password: setup.admin_password.to_owned(),
+ password_verify: setup.admin_password.to_owned(),
+ admin: true,
+ show_nsfw: true,
+ };
+ let login_response = Oper::new(register).perform(&conn)?;
+ info!("Admin {} created", setup.admin_username);
+
+ let create_site = CreateSite {
+ name: setup.site_name.to_owned(),
+ description: None,
+ enable_downvotes: false,
+ open_registration: false,
+ enable_nsfw: false,
+ auth: login_response.jwt,
+ };
+ Oper::new(create_site).perform(&conn)?;
+ info!("Site {} created", setup.site_name);
+ Some(SiteView::read(&conn)?)
+ } else {
+ None
};
let mut admins = UserView::admins(&conn)?;