[pbs-devel] [REBASED backup 13/14] api: acme: make account name optional in register call
Wolfgang Bumiller
w.bumiller at proxmox.com
Thu Apr 29 15:13:21 CEST 2021
we do this in PVE and PMG and default to "default", so let's
do it here too, this is mostly for UI compatibility
Signed-off-by: Wolfgang Bumiller <w.bumiller at proxmox.com>
---
src/api2/config/acme.rs | 10 ++++++++--
src/config/acme/mod.rs | 14 +++++++++++++-
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/src/api2/config/acme.rs b/src/api2/config/acme.rs
index 4f72a94e..25a050e8 100644
--- a/src/api2/config/acme.rs
+++ b/src/api2/config/acme.rs
@@ -161,7 +161,10 @@ fn account_contact_from_string(s: &str) -> Vec<String> {
#[api(
input: {
properties: {
- name: { type: AccountName },
+ name: {
+ type: AccountName,
+ optional: true,
+ },
contact: {
description: "List of email addresses.",
},
@@ -183,7 +186,7 @@ fn account_contact_from_string(s: &str) -> Vec<String> {
)]
/// Register an ACME account.
fn register_account(
- name: AccountName,
+ name: Option<AccountName>,
// Todo: email & email-list schema
contact: String,
tos_url: Option<String>,
@@ -192,6 +195,9 @@ fn register_account(
) -> Result<String, Error> {
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
+ let name = name
+ .unwrap_or_else(|| unsafe { AccountName::from_string_unchecked("default".to_string()) });
+
if Path::new(&crate::config::acme::account_path(&name)).exists() {
http_bail!(BAD_REQUEST, "account {:?} already exists", name);
}
diff --git a/src/config/acme/mod.rs b/src/config/acme/mod.rs
index c8640fcb..5c018fa3 100644
--- a/src/config/acme/mod.rs
+++ b/src/config/acme/mod.rs
@@ -5,7 +5,7 @@ use std::path::Path;
use anyhow::{bail, format_err, Error};
use serde::{Deserialize, Serialize};
-use proxmox::api::api;
+use proxmox::api::{api, schema::Schema};
use proxmox::sys::error::SysError;
use proxmox::tools::fs::CreateOptions;
@@ -121,6 +121,18 @@ impl AccountName {
pub fn into_string(self) -> String {
self.0
}
+
+ pub fn from_string(name: String) -> Result<Self, Error> {
+ match &Self::API_SCHEMA {
+ Schema::String(s) => s.check_constraints(&name)?,
+ _ => unreachable!(),
+ }
+ Ok(Self(name))
+ }
+
+ pub unsafe fn from_string_unchecked(name: String) -> Self {
+ Self(name)
+ }
}
impl std::ops::Deref for AccountName {
--
2.20.1
More information about the pbs-devel
mailing list