index.pug 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. extends ../layout-marketing
  2. include ../_mixins/bookmarkable_tabset
  3. block content
  4. #main-content.content.content-alt
  5. .container
  6. .row
  7. .col-sm-12
  8. .card
  9. .card-body
  10. .page-header
  11. h1 Admin Panel
  12. .ol-tabs(data-ol-bookmarkable-tabset)
  13. .nav-tabs-container
  14. ul.nav.nav-tabs.align-left(role='tablist')
  15. +bookmarkable-tabset-header('system-messages', 'System Messages', true)
  16. +bookmarkable-tabset-header('open-sockets', 'Open Sockets')
  17. +bookmarkable-tabset-header('open-close-editor', 'Open/Close Editor')
  18. +bookmarkable-tabset-header('privileges-matrix', 'Privileges Matrix')
  19. if hasFeature('saas')
  20. +bookmarkable-tabset-header('tpds', 'TPDS/Dropbox Management')
  21. +bookmarkable-tabset-header('debug-projects', 'Debug Projects')
  22. .tab-content
  23. .tab-pane.active(role='tabpanel' id='system-messages')
  24. each message in systemMessages
  25. ul.system-messages
  26. li.system-message.row-spaced #{message.content}
  27. hr
  28. form(method='post' action='/admin/messages')
  29. input(name='_csrf' type='hidden' value=csrfToken)
  30. .form-group
  31. label.form-label(for='system-message') Message
  32. input#system-message.form-control(
  33. name='content'
  34. type='text'
  35. required
  36. )
  37. button.btn.btn-primary(type='submit') Post Message
  38. hr
  39. form(method='post' action='/admin/messages/clear')
  40. input(name='_csrf' type='hidden' value=csrfToken)
  41. button.btn.btn-danger(type='submit') Clear all messages
  42. .tab-pane(role='tabpanel' id='open-sockets')
  43. .row-spaced
  44. ul
  45. each agents, url in openSockets
  46. li #{url} - total : #{agents.length}
  47. ul
  48. each agent in agents
  49. li #{agent}
  50. .tab-pane(role='tabpanel' id='open-close-editor')
  51. if hasFeature('saas')
  52. | The "Open/Close Editor" feature is not available in SAAS.
  53. else
  54. .row-spaced
  55. form(method='post' action='/admin/closeEditor')
  56. input(name='_csrf' type='hidden' value=csrfToken)
  57. button.btn.btn-danger(type='submit') Close Editor
  58. p.small Will stop anyone opening the editor. Will NOT disconnect already connected users.
  59. .row-spaced
  60. form(method='post' action='/admin/disconnectAllUsers')
  61. input(name='_csrf' type='hidden' value=csrfToken)
  62. button.btn.btn-danger(type='submit') Disconnect all users
  63. p.small Will force disconnect all users with the editor open. Make sure to close the editor first to avoid them reconnecting.
  64. .row-spaced
  65. form(method='post' action='/admin/openEditor')
  66. input(name='_csrf' type='hidden' value=csrfToken)
  67. button.btn.btn-danger(type='submit') Reopen Editor
  68. p.small Will reopen the editor after closing.
  69. .tab-pane(role='tabpanel' id='privileges-matrix')
  70. p This matrix shows the access levels for different admin roles across various user management privileges. The matrix is automatically generated from the code-defined roles and capabilities.
  71. if hasFeature('saas') && privilegesMatrix
  72. .privileges-matrix-container
  73. table.table.table-bordered.table-striped.privileges-matrix-table
  74. thead
  75. tr
  76. th Webpage and privilege
  77. th(colspan=privilegesMatrix.roles.length) Access Level Needed For Team
  78. tr
  79. th
  80. each role in privilegesMatrix.roles
  81. th= role.displayName
  82. tbody
  83. - let currentSection = null
  84. each row in privilegesMatrix.privileges
  85. - const privilege = row.privilege
  86. if currentSection !== privilege.section
  87. - currentSection = privilege.section
  88. tr.section-header
  89. td(colspan=privilegesMatrix.roles.length + 1)
  90. strong= privilege.section
  91. tr
  92. td.privilege-label= privilege.label
  93. each role in privilegesMatrix.roles
  94. - const accessLevel = row.access[role.id]
  95. td.access-cell(class=`access-${accessLevel}`)
  96. span.access-badge(class=`badge-${accessLevel}`)
  97. if accessLevel === 'yes'
  98. | Yes
  99. else
  100. | No
  101. else
  102. p The privileges matrix is not available in this environment.
  103. if hasFeature('saas')
  104. .tab-pane(role='tabpanel' id='tpds')
  105. h3 Flush project to TPDS
  106. .row
  107. form.col-xs-6(method='post' action='/admin/flushProjectToTpds')
  108. input(name='_csrf' type='hidden' value=csrfToken)
  109. .form-group
  110. label.form-label(for='project-id') project_id
  111. input.form-control(
  112. name='project_id'
  113. id='project-id'
  114. type='text'
  115. required
  116. )
  117. .form-group
  118. button.btn-primary.btn(type='submit') Flush
  119. hr
  120. h3 Poll Dropbox for user
  121. .row
  122. form.col-xs-6(method='post' action='/admin/pollDropboxForUser')
  123. input(name='_csrf' type='hidden' value=csrfToken)
  124. .form-group
  125. label.form-label(for='user-id') user_id
  126. input.form-control(name='user_id' id='user-id' type='text' required)
  127. .form-group
  128. button.btn-primary.btn(type='submit') Poll
  129. .tab-pane(role='tabpanel' id='debug-projects')
  130. if debugProjects.length
  131. table.table.table-striped
  132. thead
  133. tr
  134. th Owner
  135. th Project Name
  136. th Last updated
  137. tbody
  138. each project in debugProjects
  139. tr
  140. td= project.owner_ref.email
  141. td= project.name
  142. td= moment(project.lastUpdated.toUTCString()).format('Do MMM YYYY, h:mm a') + ' UTC'
  143. else
  144. p.text-muted No debug projects found