Enable LDAP and SAML authentication support

This commit is contained in:
yu-i-i
2026-09-18 20:48:52 +02:00
parent 3a8ef14900
commit 6097d93c90
25 changed files with 944 additions and 7 deletions
@@ -175,7 +175,8 @@ function registerExternalAuthAdmin(authMethod) {
await User.updateOne(
{ _id: user._id },
{
$set: { isAdmin: true, emails: [{ email, reversedHostname }] },
$set: { isAdmin: true, emails: [{ email, reversedHostname, 'confirmedAt' : Date.now() }] },
$unset: { 'hashedPassword': "" }, // external-auth user must not have a hashedPassword
}
).exec()
} catch (err) {
@@ -129,6 +129,41 @@ block content
span(data-ol-inflight='idle') #{translate("register")}
span(hidden data-ol-inflight='pending') #{translate("registering")}…
h3 #{translate('local_account')}
p
| #{translate('alternatively_create_local_admin_account')}
form(
data-ol-async-form
data-ol-register-admin
action='/launchpad/register_admin'
method='POST'
)
input(name='_csrf' type='hidden' value=csrfToken)
+formMessages
.form-group
label.form-label(for='email') #{translate("email")}
input.form-control(
name='email'
type='email'
id='email-local'
autocomplete='username'
required
autofocus='true'
)
.form-group
label.form-label(for='passwordField') #{translate("password")}
input#passwordField.form-control(
name='password'
type='password'
autocomplete='new-password'
required
)
.actions
button.btn-primary.btn(type='submit' data-ol-disabled-inflight)
span(data-ol-inflight='idle') #{translate("register")}
span(hidden data-ol-inflight='pending') #{translate("registering")}…
// Saml Form
if authMethod === 'saml'
h3 #{translate('saml')}
@@ -158,6 +193,41 @@ block content
span(data-ol-inflight='idle') #{translate("register")}
span(hidden data-ol-inflight='pending') #{translate("registering")}…
h3 #{translate('local_account')}
p
| #{translate('alternatively_create_local_admin_account')}
form(
data-ol-async-form
data-ol-register-admin
action='/launchpad/register_admin'
method='POST'
)
input(name='_csrf' type='hidden' value=csrfToken)
+formMessages
.form-group
label.form-label(for='email-local') #{translate("email")}
input.form-control(
name='email'
type='email'
id='email-local'
autocomplete='username'
required
autofocus='true'
)
.form-group
label.form-label(for='passwordField') #{translate("password")}
input#passwordField.form-control(
name='password'
type='password'
autocomplete='new-password'
required
)
.actions
button.btn-primary.btn(type='submit' data-ol-disabled-inflight)
span(data-ol-inflight='idle') #{translate("register")}
span(hidden data-ol-inflight='pending') #{translate("registering")}…
br
<!-- status indicators -->