diff --git a/overleafserver/launchpad.pug b/overleafserver/launchpad.pug new file mode 100644 index 0000000..ca08f96 --- /dev/null +++ b/overleafserver/launchpad.pug @@ -0,0 +1,232 @@ +extends ../../../../app/views/layout-marketing + +mixin launchpad-check(section) + div(data-ol-launchpad-check=section) + span(data-ol-inflight="pending") + i.fa.fa-fw.fa-spinner.fa-spin + span  #{translate('checking')} + + span(hidden data-ol-inflight="idle") + div(data-ol-result="success") + i.fa.fa-check + span  #{translate('ok')} + button.btn.btn-inline-link + span.text-danger  #{translate('retry')} + div(hidden data-ol-result="error") + i.fa.fa-exclamation + span  #{translate('error')} + button.btn.btn-inline-link + span.text-danger  #{translate('retry')} + div.alert.alert-danger + span(data-ol-error) + +block entrypointVar + - entrypoint = 'modules/launchpad/pages/launchpad' + +block vars + - metadata = metadata || {} + +block append meta + meta(name="ol-adminUserExists" data-type="boolean" content=adminUserExists) + meta(name="ol-ideJsPath" content=buildJsPath('ide-detached.js')) + +block content + script(type="text/javascript", nonce=scriptNonce, src=(wsUrl || '/socket.io') + '/socket.io.js') + + .content.content-alt#main-content + .container + .row + .col-md-8.col-md-offset-2 + .card.launchpad-body + .row + .col-md-12 + .text-center + h1 #{translate('welcome_to_sl')} + p + img(src=buildImgPath('/ol-brand/overleaf-o.svg')) + + + .row + .col-md-8.col-md-offset-2 + + + + if !adminUserExists + .row(data-ol-not-sent) + .col-md-12 + h2 #{translate('create_first_admin_account')} + + // Local Auth Form + if authMethod === 'local' + 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(for='email') #{translate("email")} + input.form-control( + type='email', + name='email', + placeholder="email@example.com" + autocomplete="username" + required, + autofocus="true" + ) + .form-group + label(for='password') #{translate("password")} + input.form-control#passwordField( + type='password', + name='password', + placeholder="********", + 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")}… + + // Ldap Form + if authMethod === 'ldap' + h3 #{translate('ldap')} + p + | #{translate('ldap_create_admin_instructions')} + + form( + data-ol-async-form + data-ol-register-admin + action="/launchpad/register_ldap_admin" + method="POST" + ) + input(name='_csrf', type='hidden', value=csrfToken) + +formMessages() + .form-group + label(for='email') #{translate("email")} + input.form-control( + type='email', + name='email', + placeholder="email@example.com" + autocomplete="username" + required, + autofocus="true" + ) + .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')} + p + | #{translate('saml_create_admin_instructions')} + + form( + data-ol-async-form + data-ol-register-admin + action="/launchpad/register_saml_admin" + method="POST" + ) + input(name='_csrf', type='hidden', value=csrfToken) + +formMessages() + .form-group + label(for='email') #{translate("email")} + input.form-control( + type='email', + name='email', + placeholder="email@example.com" + autocomplete="username" + required, + autofocus="true" + ) + .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 + + + if adminUserExists + .row + .col-md-12.status-indicators + + h2 #{translate('status_checks')} + + + .row.row-spaced-small + .col-sm-5 + | #{translate('editor_resources')} + .col-sm-7 + +launchpad-check('ide') + + + .row.row-spaced-small + .col-sm-5 + | #{translate('websockets')} + .col-sm-7 + +launchpad-check('websocket') + + + hr.thin + + + .row + .col-md-12 + h2 #{translate('other_actions')} + + h3 #{translate('send_test_email')} + form.form( + data-ol-async-form + action="/launchpad/send_test_email" + method="POST" + ) + .form-group + label(for="email") Email + input.form-control( + type="text" + id="email" + name="email" + required + ) + button.btn-primary.btn( + type='submit' + data-ol-disabled-inflight + ) + span(data-ol-inflight="idle") #{translate("send")} + span(hidden data-ol-inflight="pending") #{translate("sending")}… + + p + +formMessages() + + + + + hr.thin + + + + .row + .col-md-12 + .text-center + br + p + a(href="/admin").btn.btn-info + | Go To Admin Panel + |   + a(href="/project").btn.btn-primary + | Start Using #{settings.appName} + br