external-accounts.html 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. {% extends '../layout/2column.html' %}
  2. {% block html_title %}{{ t('Password Settings') }} · {{ path }}{% endblock %}
  3. {% block content_head %}
  4. <div class="header-wrap">
  5. <header id="page-header">
  6. <h1 class="title" id="">{{ t('User Settings') }}</h1>
  7. </header>
  8. </div>
  9. {% endblock %}
  10. {% block content_main %}
  11. <div class="content-main">
  12. <ul class="nav nav-tabs">
  13. <li><a href="/me"><i class="fa fa-gears"></i> {{ t('User Information') }}</a></li>
  14. <li class="active"><a href="/me/external-accounts"><i class="fa fa-user-plus"></i> {{ t('External Accounts') }}</a></li>
  15. <li><a href="/me/password"><i class="fa fa-key"></i> {{ t('Password Settings') }}</a></li>
  16. <li><a href="/me/apiToken"><i class="fa fa-rocket"></i> {{ t('API Settings') }}</a></li>
  17. </ul>
  18. <div class="tab-content">
  19. {#
  20. # The case that there already exists a user whose username matches ID of the newly created LDAP user
  21. # https://github.com/weseek/crowi-plus/issues/193
  22. #}
  23. {% set isDuplicatedUsernameExceptionOccured = req.flash('isDuplicatedUsernameExceptionOccured') %}
  24. {% if isDuplicatedUsernameExceptionOccured != null %}
  25. <div class="alert alert-warning">
  26. <i class="fa fa-fw fa-info-circle"></i>
  27. <strong>DuplicatedUsernameException occured</strong>
  28. <p>
  29. Your LDAP authentication was succeess, but a new user could not be created.
  30. See the issue <a href="https://github.com/weseek/crowi-plus/issues/193">#193</a>.
  31. </p>
  32. </div>
  33. {% endif %}
  34. {% set error = req.flash('errorMessage') %}
  35. {% if error.length %}
  36. {% for e in error %}
  37. <div class="alert alert-danger">
  38. {{ e }}
  39. </div>
  40. {% endfor %}
  41. {% endif %}
  42. {% set warn = req.flash('warningMessage') %}
  43. {% if warn.length %}
  44. {% for w in warn %}
  45. <div class="alert alert-warning">
  46. {{ w }}
  47. </div>
  48. {% endfor %}
  49. {% endif %}
  50. {% set message = req.flash('successMessage') %}
  51. {% if message.length %}
  52. <div class="alert alert-success">
  53. {{ message }}
  54. </div>
  55. {% endif %}
  56. <legend style="line-height: 1.7em;">
  57. <button class="btn btn-default btn-sm pull-right" data-target="#create-external-account" data-toggle="modal">
  58. <i class="fa fa-plus-circle" aria-hidden="true"></i>
  59. Add
  60. </button>
  61. {{ t('External Accounts') }}
  62. </legend>
  63. <div class="row">
  64. <div class="col-md-12">
  65. <table class="table table-hover table-striped table-bordered table-user-list">
  66. <thead>
  67. <tr>
  68. <th width="120px">Authentication Provider</th>
  69. <th>
  70. <code>accountId</code>
  71. </th>
  72. <th width="200px">{{ t('Created') }}</th>
  73. <th width="150px">{{ t('Admin') }}</th>
  74. </tr>
  75. </thead>
  76. <tbody>
  77. {% for account in externalAccounts %}
  78. <tr>
  79. <td>{{ account.providerType }}</td>
  80. <td>
  81. <strong>{{ account.accountId }}</strong>
  82. </td>
  83. <td>{{ account.createdAt|date('Y-m-d', account.createdAt.getTimezoneOffset()) }}</td>
  84. <td>
  85. <div class="btn-group">
  86. <form action="/me/external-accounts/disassociate" method="post">
  87. <input type="hidden" name="_csrf" value="{{ csrf() }}">
  88. <button type="submit" class="btn btn-sm btn-danger">
  89. <i class="fa fa-unlink"></i>
  90. {{ t('Diassociate') }}
  91. </button>
  92. </form>
  93. </div>{# end of .btn-group #}
  94. </td>
  95. </tr>
  96. {% endfor %}
  97. </tbody>
  98. </table>
  99. </div>
  100. </div>
  101. {# modal #}
  102. <style>
  103. .modal.create-external-account .modal-dialog {
  104. width: 750px;
  105. }
  106. </style>
  107. <div class="modal create-external-account" id="create-external-account">
  108. <div class="modal-dialog">
  109. <div class="modal-content">
  110. <div class="modal-header">
  111. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  112. <h4 class="modal-title">{{ t('Create External Account') }}</h4>
  113. </div>
  114. <div class="modal-body">
  115. <div id="form-box">
  116. <form action="/me/external-accounts/associate" method="post" class="form-horizontal" role="form">
  117. <fieldset>
  118. <div class="form-group">
  119. <label for="username" class="col-xs-3 control-label">{{ t('Username') }}</label>
  120. <div class="col-xs-6">
  121. <input class="form-control" name="loginForm[username]">
  122. </div>
  123. </div>
  124. <div class="form-group">
  125. <label for="password" class="col-xs-3 control-label">{{ t('Password') }}</label>
  126. <div class="col-xs-6">
  127. <input class="form-control col-xs-4" type="password" name="loginForm[password]">
  128. </div>
  129. </div>
  130. <div class="form-group">
  131. <div class="col-xs-offset-2 col-xs-10">
  132. <button type="submit" class="btn btn-primary">{{ t('Associate') }}</button>
  133. </div>
  134. </div>
  135. </fieldset>
  136. </form>
  137. </div>
  138. </div><!-- /.modal-body -->
  139. </div><!-- /.modal-content -->
  140. </div><!-- /.modal-dialog -->
  141. </div><!-- /.modal -->
  142. </div>
  143. {% endblock content_main %}
  144. {% block content_footer %}
  145. {% endblock %}
  146. {% block footer %}
  147. {% endblock %}