Skip to content

Commit

Permalink
feat: [torrust#654] new registration confg section
Browse files Browse the repository at this point in the history
Registration Disabled:

```toml
```

Registration without email option:

```toml
[registration]
```

Registration optionally including an email address:

```toml
[registration]
[registration.email]
```

Registration with  email:

```toml
[registration]
[registration.email]
required = true
```

Registration with optional email, but if email is supplied it is verified:

```toml
[registration]
[registration.email]
verified = true
```

Registration with email and email is verified:

```toml
[registration]
[registration.email]
required = true
verified = true
```

TODO: remove old settings and use the new ones.
  • Loading branch information
josecelano committed Jul 9, 2024
1 parent 304221e commit 1c5e862
Show file tree
Hide file tree
Showing 8 changed files with 156 additions and 11 deletions.
2 changes: 2 additions & 0 deletions share/default/config/index.container.mysql.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,5 @@ connect_url = "mysql://root:root_secret_password@mysql:3306/torrust_index"
port = 1025
server = "mailcatcher"

[registration]
[registration.email]
3 changes: 3 additions & 0 deletions share/default/config/index.container.sqlite3.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,6 @@ connect_url = "sqlite:///var/lib/torrust/index/database/sqlite3.db?mode=rwc"
[mail.smtp]
port = 1025
server = "mailcatcher"

[registration]
[registration.email]
3 changes: 3 additions & 0 deletions share/default/config/index.development.sqlite3.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@ threshold = "info"
#[net.tsl]
#ssl_cert_path = "./storage/index/lib/tls/localhost.crt"
#ssl_key_path = "./storage/index/lib/tls/localhost.key"

[registration]
[registration.email]
3 changes: 3 additions & 0 deletions share/default/config/index.private.e2e.container.sqlite3.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,6 @@ connect_url = "sqlite:///var/lib/torrust/index/database/e2e_testing_sqlite3.db?m
[mail.smtp]
port = 1025
server = "mailcatcher"

[registration]
[registration.email]
3 changes: 3 additions & 0 deletions share/default/config/index.public.e2e.container.mysql.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,6 @@ connect_url = "mysql://root:root_secret_password@mysql:3306/torrust_index_e2e_te
[mail.smtp]
port = 1025
server = "mailcatcher"

[registration]
[registration.email]
3 changes: 3 additions & 0 deletions share/default/config/index.public.e2e.container.sqlite3.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,6 @@ connect_url = "sqlite:///var/lib/torrust/index/database/e2e_testing_sqlite3.db?m
[mail.smtp]
port = 1025
server = "mailcatcher"

[registration]
[registration.email]
96 changes: 85 additions & 11 deletions src/config/v2/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ pub mod image_cache;
pub mod logging;
pub mod mail;
pub mod net;
pub mod registration;
pub mod tracker;
pub mod tracker_statistics_importer;
pub mod website;

use logging::Logging;
use registration::Registration;
use serde::{Deserialize, Serialize};

use self::api::Api;
Expand All @@ -25,53 +27,77 @@ use super::validator::{ValidationError, Validator};
use super::Metadata;

/// The whole configuration for the index.
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq)]
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Settings {
/// Configuration metadata.
#[serde(default = "Settings::default_metadata")]
#[serde(flatten)]
pub metadata: Metadata,

/// The logging configuration.
#[serde(default)]
#[serde(default = "Settings::default_logging")]
pub logging: Logging,

/// The website customizable values.
#[serde(default)]
#[serde(default = "Settings::default_website")]
pub website: Website,

/// The tracker configuration.
#[serde(default)]
#[serde(default = "Settings::default_tracker")]
pub tracker: Tracker,

/// The network configuration.
#[serde(default)]
#[serde(default = "Settings::default_network")]
pub net: Network,

/// The authentication configuration.
#[serde(default)]
#[serde(default = "Settings::default_auth")]
pub auth: Auth,

/// The database configuration.
#[serde(default)]
#[serde(default = "Settings::default_database")]
pub database: Database,

/// The SMTP configuration.
#[serde(default)]
#[serde(default = "Settings::default_mail")]
pub mail: Mail,

/// The image proxy cache configuration.
#[serde(default)]
#[serde(default = "Settings::default_image_cache")]
pub image_cache: ImageCache,

/// The API configuration.
#[serde(default)]
#[serde(default = "Settings::default_api")]
pub api: Api,

/// The registration configuration.
#[serde(default = "Settings::default_registration")]
pub registration: Option<Registration>,

/// The tracker statistics importer job configuration.
#[serde(default)]
#[serde(default = "Settings::default_tracker_statistics_importer")]
pub tracker_statistics_importer: TrackerStatisticsImporter,
}

impl Default for Settings {
fn default() -> Self {
Self {
metadata: Self::default_metadata(),
logging: Self::default_logging(),
website: Self::default_website(),
tracker: Self::default_tracker(),
net: Self::default_network(),
auth: Self::default_auth(),
database: Self::default_database(),
mail: Self::default_mail(),
image_cache: Self::default_image_cache(),
api: Self::default_api(),
registration: Self::default_registration(),
tracker_statistics_importer: Self::default_tracker_statistics_importer(),
}
}
}

impl Settings {
pub fn remove_secrets(&mut self) {
self.tracker.token = ApiToken::new("***");
Expand Down Expand Up @@ -101,6 +127,54 @@ impl Settings {
pub fn to_json(&self) -> String {
serde_json::to_string_pretty(self).expect("Could not encode JSON value")
}

fn default_metadata() -> Metadata {
Metadata::default()
}

fn default_logging() -> Logging {
Logging::default()
}

fn default_website() -> Website {
Website::default()
}

fn default_tracker() -> Tracker {
Tracker::default()
}

fn default_network() -> Network {
Network::default()
}

fn default_auth() -> Auth {
Auth::default()
}

fn default_database() -> Database {
Database::default()
}

fn default_mail() -> Mail {
Mail::default()
}

fn default_image_cache() -> ImageCache {
ImageCache::default()
}

fn default_api() -> Api {
Api::default()
}

fn default_registration() -> Option<Registration> {
None
}

fn default_tracker_statistics_importer() -> TrackerStatisticsImporter {
TrackerStatisticsImporter::default()
}
}

impl Validator for Settings {
Expand Down
54 changes: 54 additions & 0 deletions src/config/v2/registration.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
use serde::{Deserialize, Serialize};

/// SMTP configuration.
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Registration {
/// Whether or not to enable email verification on signup.
#[serde(default = "Registration::default_email")]
pub email: Option<Email>,
}

impl Default for Registration {
fn default() -> Self {
Self {
email: Self::default_email(),
}
}
}

impl Registration {
fn default_email() -> Option<Email> {
None
}
}

/// SMTP configuration.
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Email {
/// Whether or not email is required on signup.
#[serde(default = "Email::default_required")]
pub required: bool,

/// Whether or not email is verified.
#[serde(default = "Email::default_verified")]
pub verified: bool,
}

impl Default for Email {
fn default() -> Self {
Self {
required: Self::default_required(),
verified: Self::default_verified(),
}
}
}

impl Email {
fn default_required() -> bool {
false
}

fn default_verified() -> bool {
false
}
}

0 comments on commit 1c5e862

Please sign in to comment.