tab-user-auth.twig 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <div class="tab-pane fade in active show" id="tab-user-auth" role="tabpanel" aria-labelledby="tab-user-auth">
  2. <div class="card mb-4">
  3. <div class="card-header d-flex fs-5">
  4. <button class="btn d-md-none flex-grow-1 text-start" data-bs-target="#collapse-tab-user-auth" data-bs-toggle="collapse" aria-controls="collapse-tab-user-auth">
  5. {{ lang.user.mailbox_general }}
  6. </button>
  7. <span class="d-none d-md-block">{{ lang.user.mailbox_general }}</span>
  8. </div>
  9. <div id="collapse-tab-user-auth" class="card-body collapse" data-bs-parent="#user-content">
  10. {% if mailboxdata.attributes.force_pw_update == '1' %}
  11. <div class="alert alert-danger">{{ lang.user.force_pw_update|raw }}</div>
  12. {% endif %}
  13. {% if not skip_sogo %}
  14. <div class="row">
  15. <div class="hidden-xs col-md-3 col-xs-5 text-right"></div>
  16. <div class="col-md-3 col-xs-12">
  17. {% if dual_login and allow_admin_email_login == 'n' or mailboxdata.attributes.force_pw_update == '1' %}
  18. <button disabled class="btn btn-secondary btn-block btn-xs-lg">
  19. <i class="bi bi-inbox-fill"></i> {{ lang.user.open_webmail_sso }}
  20. </button>
  21. {% else %}
  22. <a target="_blank" href="/sogo-auth.php?login={{ mailcow_cc_username }}" role="button" class="btn btn-secondary btn-block btn-xs-lg">
  23. <i class="bi bi-inbox-fill"></i> {{ lang.user.open_webmail_sso }}
  24. </a>
  25. {% endif %}
  26. </div>
  27. </div>
  28. <hr>
  29. <div class="row">
  30. <div class="d-none d-sm-flex col-md-3 col-5 text-end"></div>
  31. <div class="col-md-9 col-12">
  32. <p class="text-muted text-muted-mt-0">{{ lang.user.direct_protocol_access|raw }}</p>
  33. {% if mailboxdata.attributes.imap_access == 1 %}<div class="badge fs-6 bg-success mb-2">IMAP <i class="bi bi-check-lg"></i></div>{% else %}<div class="badge fs-6 bg-danger">IMAP <i class="bi bi-x-lg"></i></div>{% endif %}
  34. {% if mailboxdata.attributes.smtp_access == 1 %}<div class="badge fs-6 bg-success mb-2">SMTP <i class="bi bi-check-lg"></i></div>{% else %}<div class="badge fs-6 bg-danger">SMTP <i class="bi bi-x-lg"></i></div>{% endif %}
  35. {% if mailboxdata.attributes.sieve_access == 1 %}<div class="badge fs-6 bg-success mb-2">Sieve <i class="bi bi-check-lg"></i></div>{% else %}<div class="badge fs-6 bg-danger">Sieve <i class="bi bi-x-lg"></i></div>{% endif %}
  36. {% if mailboxdata.attributes.pop3_access == 1 %}<div class="badge fs-6 bg-success mb-2">POP3 <i class="bi bi-check-lg"></i></div>{% else %}<div class="badge fs-6 bg-danger">POP3 <i class="bi bi-x-lg"></i></div>{% endif %}
  37. {% if mailboxdata.attributes.sogo_access == 1 %}<div class="badge fs-6 bg-success mb-2">SOGo <i class="bi bi-check-lg"></i></div>{% else %}<div class="badge fs-6 bg-danger">SOGo <i class="bi bi-x-lg"></i></div>{% endif %}
  38. </div>
  39. </div>
  40. <hr>
  41. {% endif %}
  42. <div class="row">
  43. <div class="col-md-3 col-12 text-sm-end text-start mb-4">{{ lang.user.in_use }}:</div>
  44. <div class="col-md-5 col-12">
  45. <div class="progress">
  46. <div class="progress-bar bg-{{ mailboxdata.percent_class }}" role="progressbar" aria-valuenow="{{ mailboxdata.percent_in_use }}" aria-valuemin="0" aria-valuemax="100" style="min-width:2em;width: {{ mailboxdata.percent_in_use }}%;">
  47. {{ mailboxdata.percent_in_use }}%
  48. </div>
  49. </div>
  50. <p>{{ mailboxdata.quota_used|formatBytes(2) }} / {% if mailboxdata.quota == 0 %}∞{% else %}{{ mailboxdata.quota|formatBytes(2) }}{% endif %}<br>{{ mailboxdata.messages }} {{ lang.user.messages }}</p>
  51. <hr>
  52. <p><a href="#pwChangeModal" data-bs-toggle="modal"><i class="bi bi-pencil-fill"></i> {{ lang.user.change_password }}</a></p>
  53. {% if acl.pw_reset == 1 %}<p><a href="#pwRecoveryEmailModal" data-bs-toggle="modal"><i class="bi bi-pencil-fill"></i> {{ lang.user.pw_recovery_email }}</a></p>{% endif %}
  54. </div>
  55. </div>
  56. <hr>
  57. {# TFA #}
  58. <div class="row">
  59. <div class="col-sm-3 col-xs-5 text-right">{{ lang.tfa.tfa }}:</div>
  60. <div class="col-sm-9 col-xs-7">
  61. <p id="tfa_pretty">{{ tfa_data.pretty }}</p>
  62. {% include 'tfa_keys.twig' %}
  63. <br>
  64. </div>
  65. </div>
  66. <div class="row">
  67. <div class="col-sm-3 col-xs-5 text-right">{{ lang.tfa.set_tfa }}:</div>
  68. <div class="col-sm-9 col-xs-7">
  69. <select data-style="btn btn-sm dropdown-toggle bs-placeholder btn-secondary" data-width="fit" id="selectTFA" class="selectpicker" title="{{ lang.tfa.select }}">
  70. <option value="yubi_otp">{{ lang.tfa.yubi_otp }}</option>
  71. <option value="webauthn">{{ lang.tfa.webauthn }}</option>
  72. <option value="totp">{{ lang.tfa.totp }}</option>
  73. <option value="none">{{ lang.tfa.none }}</option>
  74. </select>
  75. </div>
  76. </div>
  77. <hr>
  78. {# FIDO2 #}
  79. <div class="row">
  80. <div class="col-sm-3 col-12 text-sm-end text-start">
  81. <p><i class="bi bi-shield-fill-check"></i> {{ lang.fido2.fido2_auth }}</p>
  82. </div>
  83. </div>
  84. <div class="row">
  85. <div class="col-sm-3 col-12 text-sm-end text-start mb-4">
  86. {{ lang.fido2.known_ids }}:
  87. </div>
  88. <div class="col-sm-9 col-12">
  89. <div class="table-responsive">
  90. <table class="table table-striped table-hover table-condensed" id="fido2_keys">
  91. <tr>
  92. <th>ID</th>
  93. <th style="min-width:240px;text-align: right">{{ lang.admin.action }}</th>
  94. </tr>
  95. {% include 'fido2.twig' %}
  96. </table>
  97. </div>
  98. <br>
  99. </div>
  100. </div>
  101. <div class="row">
  102. <div class="offset-sm-3 col-sm-9">
  103. <div class="btn-group nowrap">
  104. <button class="btn btn-sm btn-primary d-block d-sm-inline" id="register-fido2">{{ lang.fido2.set_fido2 }}</button>
  105. <button type="button" class="btn btn-sm btn-xs-lg btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>
  106. <ul class="dropdown-menu">
  107. <li><a class="dropdown-item" href="#" id="register-fido2-touchid"><i class="bi bi-apple"></i> {{ lang.fido2.set_fido2_touchid }}</a></li>
  108. </ul>
  109. </div>
  110. </div>
  111. </div>
  112. <br>
  113. <div class="row" id="status-fido2">
  114. <div class="col-sm-3 col-5 text-end">{{ lang.fido2.register_status }}:</div>
  115. <div class="col-sm-9 col-7">
  116. <div id="fido2-alerts">-</div>
  117. </div>
  118. <br>
  119. </div>
  120. <hr>
  121. <div class="row">
  122. <div class="col-md-3 col-12 text-sm-end text-start mb-4"><i class="bi bi-file-earmark-text"></i> {{ lang.user.apple_connection_profile }}:</div>
  123. <div class="col-md-9 col-12">
  124. <p><i class="bi bi-file-earmark-post"></i> <a href="/mobileconfig.php?only_email">{{ lang.user.email }}</a> <small>IMAP, SMTP</small></p>
  125. <p class="text-muted">{{ lang.user.apple_connection_profile_mailonly }}</p>
  126. {% if not skip_sogo %}
  127. <p><i class="bi bi-file-earmark-post"></i> <a href="/mobileconfig.php">{{ lang.user.email_and_dav }}</a> <small>IMAP, SMTP, Cal/CardDAV</small></p>
  128. <p class="text-muted">{{ lang.user.apple_connection_profile_complete }}</p>
  129. {% endif %}
  130. </div>
  131. </div>
  132. <div class="row">
  133. <div class="col-md-3 col-12 text-sm-end text-start mb-4"><i class="bi bi-file-earmark-text"></i> {{ lang.user.apple_connection_profile }}<br class="d-none d-lg-block" />{{ lang.user.with_app_password }}:</div>
  134. <div class="col-md-9 col-12">
  135. <p><i class="bi bi-file-earmark-post"></i> <a href="/mobileconfig.php?only_email&amp;app_password">{{ lang.user.email }}</a> <small>IMAP, SMTP</small></p>
  136. <p class="text-muted">{{ lang.user.apple_connection_profile_mailonly }}<br /> {{ lang.user.apple_connection_profile_with_app_password }}</p>
  137. {% if not skip_sogo %}
  138. <p><i class="bi bi-file-earmark-post"></i> <a href="/mobileconfig.php?app_password">{{ lang.user.email_and_dav }}</a> <small>IMAP, SMTP, Cal/CardDAV</small></p>
  139. <p class="text-muted">{{ lang.user.apple_connection_profile_complete }}<br /> {{ lang.user.apple_connection_profile_with_app_password }}</p>
  140. {% endif %}
  141. </div>
  142. </div>
  143. <hr>
  144. <div class="row">
  145. <div class="offset-sm-3 col-sm-9">
  146. <p><a target="_blank" href="https://docs.mailcow.email/client/client/#{{ clientconfigstr }}">[{{ lang.user.client_configuration }}]</a></p>
  147. <p><a href="#userFilterModal" data-bs-toggle="modal">[{{ lang.user.show_sieve_filters }}]</a></p>
  148. <hr>
  149. <h4 class="recent-login-success">{{ lang.user.recent_successful_connections }}</h4>
  150. <div class="dropdown mt-2">
  151. <button class="btn btn-secondary btn-xs btn-xs-lg dropdown-toggle" type="button" id="history_sasl_days" data-bs-toggle="dropdown">{{ lang.user.login_history }}</button>
  152. <ul class="dropdown-menu">
  153. <li class="login-history" data-days="1"><a class="dropdown-item" href="#">1 {{ lang.user.day }}</a></li>
  154. <li class="login-history" data-days="7"><a class="dropdown-item active" href="#">1 {{ lang.user.week }}</a></li>
  155. <li class="login-history" data-days="14"><a class="dropdown-item" href="#">2 {{ lang.user.weeks }}</a></li>
  156. <li class="login-history" data-days="31"><a class="dropdown-item" href="#">1 {{ lang.user.month }}</a></li>
  157. </ul>
  158. </div>
  159. <div class="last-login mt-4" id="recent-logins"></div>
  160. <span class="clear-last-logins mt-2">
  161. {{ lang.user.clear_recent_successful_connections }}
  162. </span>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. </div>