launchpad.pug 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. extends ../../../../app/views/layout-marketing
  2. mixin launchpad-check(section)
  3. div(data-ol-launchpad-check=section)
  4. span(data-ol-inflight="pending")
  5. i.fa.fa-fw.fa-spinner.fa-spin
  6. span  #{translate('checking')}
  7. span(hidden data-ol-inflight="idle")
  8. div(data-ol-result="success")
  9. i.fa.fa-check
  10. span  #{translate('ok')}
  11. button.btn.btn-inline-link
  12. span.text-danger  #{translate('retry')}
  13. div(hidden data-ol-result="error")
  14. i.fa.fa-exclamation
  15. span  #{translate('error')}
  16. button.btn.btn-inline-link
  17. span.text-danger  #{translate('retry')}
  18. div.alert.alert-danger
  19. span(data-ol-error)
  20. block entrypointVar
  21. - entrypoint = 'modules/launchpad/pages/launchpad'
  22. block vars
  23. - metadata = metadata || {}
  24. - bootstrap5PageStatus = 'disabled'
  25. block append meta
  26. meta(name="ol-adminUserExists" data-type="boolean" content=adminUserExists)
  27. meta(name="ol-ideJsPath" content=buildJsPath('ide.js'))
  28. block content
  29. script(type="text/javascript", nonce=scriptNonce, src=(wsUrl || '/socket.io') + '/socket.io.js')
  30. .content.content-alt#main-content
  31. .container
  32. .row
  33. .col-md-8.col-md-offset-2
  34. .card.launchpad-body
  35. .row
  36. .col-md-12
  37. .text-center
  38. h1 #{translate('welcome_to_sl')}
  39. p
  40. img(src=buildImgPath('/ol-brand/overleaf-o.svg'))
  41. <!-- wrapper -->
  42. .row
  43. .col-md-8.col-md-offset-2
  44. <!-- create first admin form -->
  45. if !adminUserExists
  46. .row(data-ol-not-sent)
  47. .col-md-12
  48. h2 #{translate('create_first_admin_account')}
  49. // Local Auth Form
  50. if authMethod === 'local'
  51. form(
  52. data-ol-async-form
  53. data-ol-register-admin
  54. action="/launchpad/register_admin"
  55. method="POST"
  56. )
  57. input(name='_csrf', type='hidden', value=csrfToken)
  58. +formMessages()
  59. .form-group
  60. label(for='email') #{translate("email")}
  61. input.form-control(
  62. type='email',
  63. name='email',
  64. placeholder="email@example.com"
  65. autocomplete="username"
  66. required,
  67. autofocus="true"
  68. )
  69. .form-group
  70. label(for='password') #{translate("password")}
  71. input.form-control#passwordField(
  72. type='password',
  73. name='password',
  74. placeholder="********",
  75. autocomplete="new-password"
  76. required,
  77. )
  78. .actions
  79. button.btn-primary.btn(
  80. type='submit'
  81. data-ol-disabled-inflight
  82. )
  83. span(data-ol-inflight="idle") #{translate("register")}
  84. span(hidden data-ol-inflight="pending") #{translate("registering")}…
  85. // Ldap Form
  86. if authMethod === 'ldap'
  87. h3 #{translate('ldap')}
  88. p
  89. | #{translate('ldap_create_admin_instructions')}
  90. form(
  91. data-ol-async-form
  92. data-ol-register-admin
  93. action="/launchpad/register_ldap_admin"
  94. method="POST"
  95. )
  96. input(name='_csrf', type='hidden', value=csrfToken)
  97. +formMessages()
  98. .form-group
  99. label(for='email') #{translate("email")}
  100. input.form-control(
  101. type='email',
  102. name='email',
  103. placeholder="email@example.com"
  104. autocomplete="username"
  105. required,
  106. autofocus="true"
  107. )
  108. .actions
  109. button.btn-primary.btn(
  110. type='submit'
  111. data-ol-disabled-inflight
  112. )
  113. span(data-ol-inflight="idle") #{translate("register")}
  114. span(hidden data-ol-inflight="pending") #{translate("registering")}…
  115. // Saml Form
  116. if authMethod === 'saml'
  117. h3 #{translate('saml')}
  118. p
  119. | #{translate('saml_create_admin_instructions')}
  120. form(
  121. data-ol-async-form
  122. data-ol-register-admin
  123. action="/launchpad/register_saml_admin"
  124. method="POST"
  125. )
  126. input(name='_csrf', type='hidden', value=csrfToken)
  127. +formMessages()
  128. .form-group
  129. label(for='email') #{translate("email")}
  130. input.form-control(
  131. type='email',
  132. name='email',
  133. placeholder="email@example.com"
  134. autocomplete="username"
  135. required,
  136. autofocus="true"
  137. )
  138. .actions
  139. button.btn-primary.btn(
  140. type='submit'
  141. data-ol-disabled-inflight
  142. )
  143. span(data-ol-inflight="idle") #{translate("register")}
  144. span(hidden data-ol-inflight="pending") #{translate("registering")}…
  145. br
  146. <!-- status indicators -->
  147. if adminUserExists
  148. .row
  149. .col-md-12.status-indicators
  150. h2 #{translate('status_checks')}
  151. <!-- websocket -->
  152. .row.row-spaced-small
  153. .col-sm-5
  154. | #{translate('websockets')}
  155. .col-sm-7
  156. +launchpad-check('websocket')
  157. <!-- break -->
  158. hr.thin
  159. <!-- other actions -->
  160. .row
  161. .col-md-12
  162. h2 #{translate('other_actions')}
  163. h3 #{translate('send_test_email')}
  164. form.form(
  165. data-ol-async-form
  166. action="/launchpad/send_test_email"
  167. method="POST"
  168. )
  169. .form-group
  170. label(for="email") Email
  171. input.form-control(
  172. type="text"
  173. id="email"
  174. name="email"
  175. required
  176. )
  177. button.btn-primary.btn(
  178. type='submit'
  179. data-ol-disabled-inflight
  180. )
  181. span(data-ol-inflight="idle") #{translate("send")}
  182. span(hidden data-ol-inflight="pending") #{translate("sending")}…
  183. p
  184. +formMessages()
  185. <!-- break -->
  186. hr.thin
  187. <!-- Go to app -->
  188. .row
  189. .col-md-12
  190. .text-center
  191. br
  192. p
  193. a(href="/admin").btn.btn-info
  194. | Go To Admin Panel
  195. | &nbsp;
  196. a(href="/project").btn.btn-primary
  197. | Start Using #{settings.appName}
  198. br