base.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. <!--
  2. Copyright (C) 2024 Nicola Murino
  3. This WebUI uses the KeenThemes Mega Bundle, a proprietary theme:
  4. https://keenthemes.com/products/templates-mega-bundle
  5. KeenThemes HTML/CSS/JS components are allowed for use only within the
  6. SFTPGo product and restricted to be used in a resealable HTML template
  7. that can compete with KeenThemes products anyhow.
  8. This WebUI is allowed for use only within the SFTPGo product and
  9. therefore cannot be used in derivative works/products without an
  10. explicit grant from the SFTPGo Team ([email protected]).
  11. -->
  12. {{- define "navitems"}}
  13. {{- block "additionalnavitems" .}}{{- end}}
  14. {{- template "theme-switcher"}}
  15. <div class="d-flex align-items-center ms-2 ms-lg-3">
  16. <div class="btn btn-icon btn-active-light-primary w-35px h-35px w-md-40px h-md-40px" data-kt-menu-trigger="{default:'click', lg: 'hover'}" data-kt-menu-attach="parent" data-kt-menu-placement="bottom-end">
  17. <i class="ki-duotone ki-user fs-2">
  18. <i class="path1"></i>
  19. <i class="path2"></i>
  20. </i>
  21. </div>
  22. <div class="menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-title-gray-700 menu-icon-gray-500 menu-active-bg menu-state-color fw-semibold py-4 w-250px" data-kt-menu="true">
  23. <div class="menu-item px-3 my-0">
  24. <div class="menu-content d-flex align-items-center px-3 py-2">
  25. <div class="me-5">
  26. <i class="ki-duotone ki-user fs-2">
  27. <i class="path1"></i>
  28. <i class="path2"></i>
  29. </i>
  30. </div>
  31. <div class="d-flex flex-column">
  32. <div class="fw-semibold d-flex align-items-center fs-5">
  33. <span class="w-175px wrap-word">{{.LoggedUser.Username}}</span>
  34. </div>
  35. </div>
  36. </div>
  37. </div>
  38. <div class="separator my-2"></div>
  39. {{if not .HasExternalLogin}}
  40. <div class="menu-item px-3 my-0">
  41. <a href="{{.ProfileURL}}" class="menu-link px-3 py-2">
  42. <span data-i18n="title.profile" class="menu-title">Profile</span>
  43. </a>
  44. </div>
  45. <div class="menu-item px-3 my-0">
  46. <a href="{{.ChangePwdURL}}" class="menu-link px-3 py-2">
  47. <span data-i18n="title.change_password" class="menu-title">Change password</span>
  48. </a>
  49. </div>
  50. {{if .LoggedUser.CanManageMFA}}
  51. <div class="menu-item px-3 my-0">
  52. <a href="{{.MFAURL}}" class="menu-link px-3 py-2">
  53. <span data-i18n="title.two_factor_auth" class="menu-title">Two-factor authentication</span>
  54. </a>
  55. </div>
  56. {{- end}}
  57. {{- end}}
  58. <div class="menu-item px-3 my-0">
  59. <a id="id_logout_link" href="#" class="menu-link px-3 py-2">
  60. <span data-i18n="login.signout" class="menu-title">Sign out</span>
  61. </a>
  62. </div>
  63. </div>
  64. </div>
  65. {{- end}}
  66. {{- define "sidebaritems"}}
  67. {{- if .LoggedUser.HasPermission "view_users"}}
  68. <div class="menu-item">
  69. <a class="menu-link {{- if eq .CurrentURL .UsersURL}} active{{- end}}" href="{{.UsersURL}}">
  70. <span class="menu-icon">
  71. <i class="ki-duotone ki-people fs-1">
  72. <span class="path1"></span>
  73. <span class="path2"></span>
  74. <span class="path3"></span>
  75. <span class="path4"></span>
  76. <span class="path5"></span>
  77. </i>
  78. </span>
  79. <span data-i18n="title.users" class="menu-title">Users</span>
  80. </a>
  81. </div>
  82. {{- end}}
  83. {{- if .LoggedUser.HasPermission "manage_groups"}}
  84. <div class="menu-item">
  85. <a class="menu-link {{- if eq .CurrentURL .GroupsURL}} active{{- end}}" href="{{.GroupsURL}}">
  86. <span class="menu-icon">
  87. <i class="ki-duotone ki-profile-user fs-1">
  88. <span class="path1"></span>
  89. <span class="path2"></span>
  90. <span class="path3"></span>
  91. <span class="path4"></span>
  92. </i>
  93. </span>
  94. <span data-i18n="title.groups" class="menu-title">Groups</span>
  95. </a>
  96. </div>
  97. {{- end}}
  98. {{- if .LoggedUser.HasPermission "manage_folders"}}
  99. <div class="menu-item">
  100. <a class="menu-link {{- if eq .CurrentURL .FoldersURL}} active{{- end}}" href="{{.FoldersURL}}">
  101. <span class="menu-icon">
  102. <i class="ki-duotone ki-folder fs-1">
  103. <span class="path1"></span>
  104. <span class="path2"></span>
  105. </i>
  106. </span>
  107. <span data-i18n="title.folders" class="menu-title">Folders</span>
  108. </a>
  109. </div>
  110. {{- end}}
  111. {{- if .LoggedUser.HasPermission "view_conns"}}
  112. <div class="menu-item">
  113. <a class="menu-link {{- if eq .CurrentURL .ConnectionsURL}} active{{- end}}" href="{{.ConnectionsURL}}">
  114. <span class="menu-icon">
  115. <i class="ki-duotone ki-arrow-up-down fs-1">
  116. <span class="path1"></span>
  117. <span class="path2"></span>
  118. </i>
  119. </span>
  120. <span data-i18n="title.connections" class="menu-title">Connections</span>
  121. </a>
  122. </div>
  123. {{- end}}
  124. {{ if .LoggedUser.HasPermission "manage_event_rules"}}
  125. <div data-kt-menu-trigger="click" class="menu-item menu-accordion {{- if .IsEventManagerPage}} here show{{- end}}">
  126. <span class="menu-link">
  127. <span class="menu-icon">
  128. <i class="ki-duotone ki-calendar fs-1">
  129. <span class="path1"></span>
  130. <span class="path2"></span>
  131. </i>
  132. </span>
  133. <span data-i18n="title.event_manager" class="menu-title">Event Manager</span>
  134. <span class="menu-arrow"></span>
  135. </span>
  136. <div class="menu-sub menu-sub-accordion">
  137. <div class="menu-item">
  138. <a class="menu-link {{- if eq .CurrentURL .EventRulesURL}} active{{- end}}" href="{{.EventRulesURL}}">
  139. <span class="menu-bullet">
  140. <span class="bullet bullet-dot"></span>
  141. </span>
  142. <span data-i18n="title.event_rules" class="menu-title fs-5 fw-semibold">Rules</span>
  143. </a>
  144. </div>
  145. <div class="menu-item">
  146. <a class="menu-link {{- if eq .CurrentURL .EventActionsURL}} active{{- end}}" href="{{.EventActionsURL}}">
  147. <span class="menu-bullet">
  148. <span class="bullet bullet-dot"></span>
  149. </span>
  150. <span data-i18n="title.event_actions" class="menu-title fs-5 fw-semibold">Actions</span>
  151. </a>
  152. </div>
  153. </div>
  154. </div>
  155. {{- end}}
  156. {{- if or (.LoggedUser.HasPermission "manage_ip_lists") (and .HasDefender (.LoggedUser.HasPermission "view_defender"))}}
  157. <div data-kt-menu-trigger="click" class="menu-item menu-accordion {{- if .IsIPManagerPage}} here show{{- end}}">
  158. <span class="menu-link">
  159. <span class="menu-icon">
  160. <i class="ki-solid ki-shield fs-1"></i>
  161. </span>
  162. <span data-i18n="title.ip_manager" class="menu-title">IP Manager</span>
  163. <span class="menu-arrow"></span>
  164. </span>
  165. <div class="menu-sub menu-sub-accordion">
  166. {{- if .LoggedUser.HasPermission "manage_ip_lists"}}
  167. <div class="menu-item">
  168. <a class="menu-link {{- if eq .CurrentURL .IPListsURL}} active{{- end}}" href="{{.IPListsURL}}">
  169. <span class="menu-bullet">
  170. <span class="bullet bullet-dot"></span>
  171. </span>
  172. <span data-i18n="title.ip_lists" class="menu-title fs-5 fw-semibold">IP lists</span>
  173. </a>
  174. </div>
  175. {{- end}}
  176. {{- if and .HasDefender (.LoggedUser.HasPermission "view_defender")}}
  177. <div class="menu-item">
  178. <a class="menu-link {{- if eq .CurrentURL .DefenderURL}} active{{- end}}" href="{{.DefenderURL}}">
  179. <span class="menu-bullet">
  180. <span class="bullet bullet-dot"></span>
  181. </span>
  182. <span data-i18n="title.defender" class="menu-title fs-5 fw-semibold">Auto Blocklist</span>
  183. </a>
  184. </div>
  185. {{- end}}
  186. </div>
  187. </div>
  188. {{- end}}
  189. {{- if or (.LoggedUser.HasPermission "manage_system") (.LoggedUser.HasPermission "view_status") (and .HasSearcher (.LoggedUser.HasPermission "view_events"))}}
  190. <div data-kt-menu-trigger="click" class="menu-item menu-accordion {{- if .IsServerManagerPage}} here show{{- end}}">
  191. <span class="menu-link">
  192. <span class="menu-icon">
  193. <i class="ki-duotone ki-setting-3 fs-1">
  194. <span class="path1"></span>
  195. <span class="path2"></span>
  196. <span class="path3"></span>
  197. <span class="path4"></span>
  198. <span class="path5"></span>
  199. </i>
  200. </span>
  201. <span data-i18n="title.server_manager" class="menu-title">Server Manager</span>
  202. <span class="menu-arrow"></span>
  203. </span>
  204. <div class="menu-sub menu-sub-accordion">
  205. {{- if .LoggedUser.HasPermission "manage_system"}}
  206. <div class="menu-item">
  207. <a class="menu-link {{- if eq .CurrentURL .ConfigsURL}} active{{- end}}" href="{{.ConfigsURL}}">
  208. <span class="menu-bullet">
  209. <span class="bullet bullet-dot"></span>
  210. </span>
  211. <span data-i18n="title.configs" class="menu-title fs-5 fw-semibold">Configurations</span>
  212. </a>
  213. </div>
  214. {{- end}}
  215. {{ if and .HasSearcher (.LoggedUser.HasPermission "view_events")}}
  216. <div class="menu-item">
  217. <a class="menu-link {{- if eq .CurrentURL .EventsURL}} active{{- end}}" href="{{.EventsURL}}">
  218. <span class="menu-bullet">
  219. <span class="bullet bullet-dot"></span>
  220. </span>
  221. <span data-i18n="title.logs" class="menu-title fs-5 fw-semibold">Logs</span>
  222. </a>
  223. </div>
  224. {{- end}}
  225. {{- if .LoggedUser.HasPermission "manage_system"}}
  226. <div class="menu-item">
  227. <a class="menu-link {{- if eq .CurrentURL .MaintenanceURL}} active{{- end}}" href="{{.MaintenanceURL}}">
  228. <span class="menu-bullet">
  229. <span class="bullet bullet-dot"></span>
  230. </span>
  231. <span data-i18n="title.maintenance" class="menu-title fs-5 fw-semibold">Maintenance</span>
  232. </a>
  233. </div>
  234. {{- end}}
  235. {{- if .LoggedUser.HasPermission "view_status"}}
  236. <div class="menu-item">
  237. <a class="menu-link {{- if eq .CurrentURL .StatusURL}} active{{- end}}" href="{{.StatusURL}}">
  238. <span class="menu-bullet">
  239. <span class="bullet bullet-dot"></span>
  240. </span>
  241. <span data-i18n="title.status" class="menu-title fs-5 fw-semibold">Status</span>
  242. </a>
  243. </div>
  244. {{- end}}
  245. </div>
  246. </div>
  247. {{- end}}
  248. {{- if .LoggedUser.HasPermission "manage_admins"}}
  249. <div class="menu-item">
  250. <a class="menu-link {{- if eq .CurrentURL .AdminsURL}} active{{- end}}" href="{{.AdminsURL}}">
  251. <span class="menu-icon">
  252. <i class="ki-solid ki-security-user fs-1"></i>
  253. </span>
  254. <span data-i18n="title.admins" class="menu-title">Admins</span>
  255. </a>
  256. </div>
  257. {{- end}}
  258. {{- if .LoggedUser.HasPermission "manage_roles"}}
  259. <div class="menu-item">
  260. <a class="menu-link {{- if eq .CurrentURL .RolesURL}} active{{- end}}" href="{{.RolesURL}}">
  261. <span class="menu-icon">
  262. <i class="ki-duotone ki-user-tick fs-1">
  263. <span class="path1"></span>
  264. <span class="path2"></span>
  265. <span class="path3"></span>
  266. </i>
  267. </span>
  268. <span data-i18n="title.roles" class="menu-title">Roles</span>
  269. </a>
  270. </div>
  271. {{- end}}
  272. {{- end}}