@c8y/ng1-modules 1016.257.0 → 1016.259.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";function _objectSpread(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?Object(arguments[e]):{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&r.push.apply(r,Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.forEach(function(e){_defineProperty(n,e,t[e])})}return n}function _defineProperty(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function _toConsumableArray(e){return _arrayWithoutHoles(e)||_iterableToArray(e)||_unsupportedIterableToArray(e)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,n){if(e){if("string"==typeof e)return _arrayLikeToArray(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(e,n):void 0}}function _iterableToArray(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _arrayWithoutHoles(e){if(Array.isArray(e))return _arrayLikeToArray(e)}function _arrayLikeToArray(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}!function(){function e(c,s,t,f,o,e,r){var n="user/{tenant}/users",u="user/currentUser",a=null,l={headers:f.contentHeaders("user",!0)},i={headers:f.contentHeaders("user",!0)};function d(e){var n=_.cloneDeep(e);return n.id&&delete n.userName,delete n.id,delete n.self,delete n.effectiveRoles,n}function
|
|
1
|
+
"use strict";function _objectSpread(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?Object(arguments[e]):{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&r.push.apply(r,Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.forEach(function(e){_defineProperty(n,e,t[e])})}return n}function _defineProperty(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function _toConsumableArray(e){return _arrayWithoutHoles(e)||_iterableToArray(e)||_unsupportedIterableToArray(e)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,n){if(e){if("string"==typeof e)return _arrayLikeToArray(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(e,n):void 0}}function _iterableToArray(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _arrayWithoutHoles(e){if(Array.isArray(e))return _arrayLikeToArray(e)}function _arrayLikeToArray(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}!function(){function e(c,s,t,f,o,e,r){var n="user/{tenant}/users",u="user/currentUser",a=null,l={headers:f.contentHeaders("user",!0)},i={headers:f.contentHeaders("user",!0)};function d(e,n){return e.replace(/\{tenant\}/g,n)}function h(e){var n=_.cloneDeep(e);return n.id&&delete n.userName,delete n.id,delete n.self,delete n.effectiveRoles,n}function p(e){var n=e.id||e;return v().then(function(e){return"".concat(e,"/").concat(encodeURIComponent(n))})}function g(){return s.when(f.url(u))}function v(){return m().then(function(e){return f.url(d(n,e.tenant))})}function y(e){var n=e.match(/\/user\/([\w-]+)\//);if(n.length<2)throw new Error("Cannot find tenant on user self URL");return n[1]}function m(e){var n=u,t=_.cloneDeep(i);return e&&(a=null),a&&!_.isFunction(a.then)?s.when(a):a=a||c.get(f.url(n),t).then(function(e){return(a=e.data).tenant=y(a.self),a},function(){return a=null,s.reject()})}function b(e){var n=f.pageSizeFilter(e),t={params:n},r=f.cleanListCallback("users",b,n);return v().then(function(e){return c.get(e,t).then(r)})}function w(e,n){var t={silentError:n};return p(e).then(function(e){return c.get(e,t)})}function T(){var e=f.url(u),n=_.cloneDeep(i);return c.get(e,n)}function S(r,u){var o=u,a=h(r),n=_.cloneDeep(l),i=o?g():p(r);return i.then(function(e){return c.put(e,a,n)}).then(function(e){var n=s.resolve(e),t=e.data;return!_.isUndefined(a.password)&&o&&(a.id=t.id,n=n.then(function(){return s.when(U(a))})),_.isUndefined(r.owner)||r.owner===t.owner||(n=n.then(null===r.owner?function(){return function(e){return p(e).then(function(e){return c.delete("".concat(e,"/owner"))}).then(function(){return w(e)})}(t)}:function(){return function(e,n){var t={owner:e.owner},r={"Content-Type":f.mimeType("userOwnerReference")};return n.then(function(e){return"".concat(e,"/owner")}).then(function(e){return c.put(e,t,{headers:r})})}(r,i)})),_.isUndefined(r.delegatedBy)||r.delegatedBy===t.delegatedBy||(n=n.then(null===r.delegatedBy?function(){return function(e){return p(e).then(function(e){return c.delete("".concat(e,"/delegatedby"))}).then(function(){return w(e)})}(t)}:function(){return function(e,n){var t={delegatedBy:e.delegatedBy},r={"Content-Type":f.mimeType("userDelegatedByReference")};return n.then(function(e){return"".concat(e,"/delegatedby")}).then(function(e){return c.put(e,t,{headers:r})})}(r,i)})),n=n.then(function(){return u?T():w(r)})}).then(function(e){return t.$emit("c8yUser:update",{user:e.data,res:e}),e})}function A(e,n){return e.id?S(e,n):function(e){var n=h(e),t=_.cloneDeep(l);return v().then(function(e){return c.post(e,n,t)})}(e)}function U(n){return P(n).then(function(e){return e?o.updatePassword(function(e){return e.password||o.getPassword()}(n)):s.resolve()})}function P(e){var n=e.id||e;return m().then(function(e){return s.when(e.id===n)})}function O(e){return _.get(e,"groups.references",[]).map(function(e){return e.group})}function j(e){var n=o.headers();return e&&(n.Authorization="Basic ".concat(e)),_.assign(n,f.contentHeaders("user",!0))}function k(){return m().then(function(e){return I(e)}).then(function(e){return e.enabledOnSystemLevel||e.enabledOnTenantLevel})}function I(e,n){var t=n||y(e.self);return r.getTfaSettings(t)}function C(e,n){var t=_.some(O(e),function(e){return e.name===n.enforcedUsersGroup});return n.enforcedOnSystemLevel||n.totpEnforcedOnTenantLevel||t}function E(e){return"".concat(e,"/roles/inventory")}return t.$on("authStateChange",function(e,n){n.hasAuth||(a=null)}),{current:m,getCurrentUser:function(){return a},checkIfCurrent:P,listAll:function(e){var o=[];return b(_objectSpread({pageSize:f.MAX_PAGESIZE},e)).then(function e(n){o.push.apply(o,_toConsumableArray(n));var t=n.statistics.pageSize,r=n.paging.next,u=n.length>=t;return r&&u?n.paging.next().then(e):s.resolve(o)})},list:b,detail:w,detailCurrent:T,remove:function(e){return p(e).then(function(e){return c.delete(e)})},enable:function(e){return A({id:e.id||e,enabled:!0})},disable:function(e){return A({id:e.id||e,enabled:!1})},save:A,saveCurrent:function(e){return A(e,!0)},savePhoneNumber:function(e,n){var t=f.url("user/currentUserPhone"),r={headers:j(o.encodeToken(e.name,e.password,e.tenant)),method:"PUT",url:t,data:{phone:n},silentError:!0};return c(r)},groups:O,isDeviceUser:function(e){return e.id.match(/^device_/)},isServiceUser:function(e){var n;return(e.id||e).match(/^service_/)&&(n=!0),n},hasRole:function(e,n){var t=function(e,n){var t=!1,r=_.get(e,"roles.references");return r&&_.forEach(r,function(e){e.role.id===n&&(t=!0)}),t}(e,n);return t||(t=function(e,n){var t=!1,r=_.get(e,"groups.references");return r&&_.forEach(r,function(e){_.forEach(e.group.roles.references,function(e){e.role.id===n&&(t=!0)})}),t}(e,n)),t},getDevicePermissions:function(e,n){var t={params:f.pageSizeFilter({moId:n})};return p(e).then(function(e){return c.get("".concat(e,"/devicePermissions"),t)})},login:function(e,n,t,r){var u=o.encodeToken(n,t,e);return o.setAuthToken(u).then(function(){return o.saveAuthToken(r)})},logout:function(){return o.logout()},revokeTokens:function(){return m().then(function(e){return f.url(d("user/logout/{tenant}/allUsers",e.tenant))}).then(function(e){return c.post(e)})},isAdmin:function(e){return _.some(e.groups.references,function(e){return"admins"===e.group.name})},changePassword:function(n,e,t){var r={newPassword:e,currentUserPassword:t};return P(n).then(function(e){return e?function(e,n){var t={"content-type":"application/json"};return g().then(function(e){return c.put("".concat(e,"/password"),n,{headers:t})}).then(function(){return U(e)})}(n,r):function(e,n){var t={"content-type":"application/json"};return p(e).then(function(e){return c.put("".concat(e,"/password"),n,{headers:t})})}(n,r)})},isCurrentPassword:function(e){return o.getPassword()===e},isTfaAvailable:k,isTfaActive:function(t){return _.isUndefined(t.id)?k():s.when(t).then(function(e){var n=e.twoFactorAuthenticationEnabled;return I(t).then(function(e){return"TOTP"===e.strategy?n:!!C(t,e)||n})})},getTenantTfaSettings:I,isEnforcedForUser:C,getTfaStrategy:function(){return e.detailValue({category:"two-factor-authentication",key:"strategy"},"SMS")},getHeaders:j,activateSupportUser:function(){var e=f.url("tenant/support-user/enable");return c.put(e)},deactivateSupportUser:function(){var e=f.url("tenant/support-user/disable");return c.put(e)},delegateTo:function(e){var n={id:e.id};return m().then(function(e){return n.delegatedBy=e.id,S(n)})},setUserTfaSettings:function(e,t){var r={"content-type":"application/json"};return p(e.id||e.userName).then(function(e){var n="".concat(e,"/tfa");return c.put(n,t,{headers:r})})},getUserTfaSettings:function(e){return p(e).then(function(e){var n="".concat(e,"/tfa");return c.get(n)})},hasExternalOrigin:function(e){return e.customProperties&&"OAUTH2"===e.customProperties.userOrigin},listInventoryRoles:function(e){return(e?s.resolve(e):m()).then(p).then(E).then(function(e){return c.get(e)})},assignInventoryRoles:function(e,n,t){var r=e?s.resolve(e):m(),u={managedObject:n,roles:_.map(t,function(e){return _.pick(e,"id")})};return r.then(p).then(E).then(function(e){return c.post(e,u)})},updateInventoryRoles:function(e,n,t){var r=e?s.resolve(e):m(),u={roles:_.map(t,function(e){return _.pick(e,"id")})};return r.then(p).then(E).then(function(e){return c.put("".concat(e,"/").concat(n),u)})},removeInventoryRoles:function(e,n){return(e?s.resolve(e):m()).then(p).then(E).then(function(e){return c.delete("".concat(e,"/").concat(n))})}}}e.$inject=["$http","$q","$rootScope","c8yBase","c8yAuth","c8ySettings","c8yTfaSettings"],angular.module("c8y.core").factory("c8yUser",e)}();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(){function e(r,u,t,c,l,n,e,o,a,i,f,s,y
|
|
1
|
+
"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(){function e(r,u,t,c,l,n,e,o,a,i,f,s,d,y){return w.$inject=["options","$uibModalInstance"],{askForPassword:function(){try{return r.get("c8yPasswordConfirm").confirmPassword().toPromise()}catch(e){return u.resolve(!0)}},currentPassword:function(){return r.get("c8yPasswordConfirm").currentPassword().toPromise().then(function(e){return null===e?u.reject():u.resolve(e)})},warnIfPasswordExpiresSoon:function(){var e="passwordExpirationAlertsDisplayed";function s(e,t){return!e||moment(e).isBefore(moment(t))}return u.all({user:l.current(),expirationAlertsDisplayedPreference:n.get(e),validityLimitInDays:o.detailValue({category:"password",key:"limit.validity"},0)}).then(function(e){var t=e.user,n=e.expirationAlertsDisplayedPreference,r=e.validityLimitInDays,o=n||{LESS_THAN_WEEK:null,LESS_THAN_DAY:null};if(0!==r){var a=moment(t.lastPasswordChange).add(r,"days"),i=moment.duration(a.diff(moment())).asDays(),u=!1;i<=1&&s(o.LESS_THAN_DAY,t.lastPasswordChange)?(u=!0,o.LESS_THAN_DAY=moment().format(c.dateFullFormat)):i<=7&&s(o.LESS_THAN_WEEK,t.lastPasswordChange)&&(u=!0,o.LESS_THAN_WEEK=moment().format(c.dateFullFormat)),u&&f.warning(d.getString("Your password will expire {{expirationTime | relativeDate}}. Consider changing password now.",{expirationTime:a}))}return o}).then(_.partial(n.set,e))},createUserFlatTree:function(e){return g(m(e))},buildUserTree:m,flattenTree:g,search:function(e,t){var n=["userName","lastName","firstName","email","phone"],r=_.constant(!0),o=_.constant(!0);if(e){var a=new RegExp(e,"i");r=function(t){return _.some(n,function(e){return a.test(t[e])})}}if(t&&t.length){var i=_.reduce(t,function(e,t){return e[t.id]=!0,e},{});o=function(e){return _.some(e.groups.references,function(e){return i[_.get(e,"group.id")]})}}return function(e){return r(e)&&o(e)}},selectUserDialog:function(e){return t.open({templateUrl:":::PLUGIN_PATH:::/ui/user/selectUser.modal.html",controllerAs:"vm",ariaLabelledBy:"modal-title",ariaDescribedBy:"modal-body",controller:w,resolve:{options:_.constant(e)}}).result},userHierarchyActive:_.once(function(){return e.listByUser().then(function(e){return!!_.find(e,{key:"c8y-feature-user-hierarchy"})})}),hideUsers:function(e,t){var n=_(_.isArray(t)?t:[t]).map(p(e)).value(),r=function(){var t=_.keyBy(n,"id");return _.filter(e,function(e){return t[e.owner]&&!t[e.id]})};for(;r().length;)n=_.union(n,r());return _.uniq(n)},mapToUsersInMemory:p,canUserManageTenant:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=e.user,n=e.tenant,o=e.mustBeTopTenant,a=r.get("c8yPermissions"),i=r.get("c8yTenant");return u.all({user:t||l.current(),tenant:n||i.current()}).then(function(e){var t=i.isTopTenant(e.tenant.name),n=_.get(e.tenant,"allowCreateTenants"),r=a.hasRole(e.user,"ROLE_TENANT_MANAGEMENT_READ");return r&&(o?t:t||n)})},requireLogout:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:angular.noop;return i({title:s("Logout required"),body:s("You must log out to apply your changes. Do you want to proceed?"),status:"warning",labels:{ok:s("Confirm and log out"),cancel:s("Cancel")},dismissValue:"canceled"}).then(e).then(function(){return h()})},logoutAndReloadPage:h};function m(t){var e=function(e){var t=_.keyBy(e,"id");return _.reject(e,function(e){return e.owner&&!t[e.owner]&&delete e.owner,e.owner})}(t),n=_.keyBy(t,"id");return _.forEach(t,function(e){e._owns=_.filter(t,{owner:e.id}),e._owner=_.get(n,e.owner)}),e}function p(n){return function(e){var t;return"string"==typeof e&&(t=e),"object"===_typeof(e)&&(t=e.userName),_.find(n,{userName:t})}}function g(e,t,n){var r=n||[],o=_.sortBy(e,["id","lastName"]),a=t||0;return _.reduce(o,function(e,t){return t._depth=a,e.push(t),g(t._owns,a+1,e)},r)}function w(e,t){_.assign(this,{textOk:s("Select"),textCancel:s("Cancel")},e,t)}function h(){return a.logout().then(function(e){e&&e.url?y.location.href=e.url:y.location.reload()})}}e.$inject=["$injector","$q","$uibModal","c8yBase","c8yUser","c8yUserPreferences","c8yApplication","c8ySettings","c8yAuth","c8yModal","c8yAlert","gettext","gettextCatalog","$window"],angular.module("c8y.ui").factory("c8yUserUtil",e)}();
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";!function(){function e(
|
|
1
|
+
"use strict";!function(){function e(u,n,i,t,r,e,s,o,a,l,c){var f,g=this;function d(e){return f=e?[]:g.users,g.users=[],i.list(function(){var e=_.get(g.filters,"text"),n=_.map(_.get(g.filters,"globalRoles"),"id"),t=n.length?n.join(","):void 0;return{withSubusersCount:!0,username:e,groups:t,withApps:!1,withGroups:!1,withRoles:!1,onlyRoots:_.isEmpty(e)}}()).then(h)}function h(e){p(e),g.users.paging=e.paging}function p(e){var n=g.users,t=n.paging,s=i.getTfaStrategy(),o=[];return _.forEach(e,function(r){var e=_.find(f,{id:r.id});r.twoFactorAuthenticationEnabled||u.all({enforced:i.isTfaActive(r),strategy:s}).then(function(e){var n=e.enforced,t=e.strategy;"SMS"!==t&&t||n&&(r.twoFactorAuthenticationEnabled=n)}),e&&(r._expanded=e._expanded,o.push(r)),_.some(n,{id:r.id})||(n=n.concat([r]))}),n.paging=t,g.users=n,o.reduce(function(e,n){return e.then(function(){return U(n)})},u.resolve())}function E(e){g.globalRoles=e}function R(e){return e._globalRoles=_.map(_.get(e,"groups.references"),function(e){return _.find(g.globalRoles,{id:e.group.id})}),e}function A(){i.current().then(function(e){g.canAddUser=i.hasRole(e,"ROLE_USER_MANAGEMENT_ADMIN")||g.FEATURE_USER_HIERARCHY&&i.hasRole(e,"ROLE_USER_MANAGEMENT_CREATE"),g.canRevokeTokens=i.hasRole(e,"ROLE_USER_MANAGEMENT_ADMIN")})}function U(e){return f=g.users,i.listAll({owner:e.id,withSubusersCount:!0}).then(p)}_.assign(g,{ROUTE_NEW_USER:r.ROUTE_NEW_USER,$onInit:function(){u.all([d(),e.global.list({pageSize:1e4}).then(E)]).then(function(){return _.forEach(g.users,R)}),r.userHierarchyActive().then(function(e){g.FEATURE_USER_HIERARCHY=e}).then(A)},loadMore:function(){g.users.paging.loading=!0,g.users.paging.next().then(h).finally(function(){g.users.paging.loading=!1})},loadUsers:d,loadSubusers:U,changeUser:function(n,e){var t="changeGlobalRoles"===e.name;return r.warnAboutUserLogOutIfNeeded(n,{rolesChanged:t}).then(function(){return r.changeUser(n,e)}).then(function(e){return function(e,n){var t,r=n||{};if(r.removeUser){g.users=_.reject(g.users,{id:e.id});var s=_.get(e,"_owner.id");g.users=_.map(g.users,function(e){return s&&s===e.id?(e.subusersCount--,angular.copy(e)):e})}r.refresh||r.removeUser||(t=i.list({username:e.id,withSubusersCount:!0}).then(_.first).then(function(t){var r=t.id,e=_.map(g.users,function(e){var n=r===e.id;return n&&(t._expanded=e._expanded),n?R(t):e});_.assign(e,_.pick(g.users,["statistics","paging"])),g.users=e}));r.refresh&&(t=d());return t}(n,e)})},showExpandCollapse:function(){return g.FEATURE_USER_HIERARCHY&&_.some(g.users,function(e){return 0<e.subusersCount||_.get(e,"_owns.length")})},collapseAll:function(){r.collapseAll(g.users)},expandAll:function(){r.expandAll(g.users),u.all(_.map(g.users,function(e){return e.subusersCount>e._owns.length?U(e).then(function(){return!0}):u.resolve(!1)})).then(function(e){_.some(e)&&n(g.expandAll)})},filters:{},applyFilters:function(){d(!0)},clearFilters:function(){g.filters={},d(!0)},isAnyFilterSelected:function(){return _.some(g.filters,_.identity)},refresh:function(){return d(!0).then(function(){return _.forEach(g.users,R)})},revokeTokens:function(){var n=c.get("c8yAuthBridgeService").getPreferredLoginOption(),e=function(){return i.current().then(function(e){return function(e){return!(!i.hasExternalOrigin(e)&&"BASIC"===n.type)}(e)})};s({title:l("Revoke user tokens"),body:l('Revoking tokens will log out all users logged with "OAI-Secure" or "Single sign-on redirect". Do you want to proceed?'),status:"warning",size:"sm",labels:{ok:l("Revoke tokens and log out users")}}).then(function(){return i.revokeTokens()}).then(function(){return e().then(function(e){return e?t.logoutAndReloadPage():u.resolve()})}).then(function(){return o.success(l("User tokens revoked."))}).catch(function(e){e&&o.danger(a.getResErrorMessage(e))})}})}e.$inject=["$q","$timeout","c8yUser","c8yUserUtil","c8yUsersUi","c8yRoles","c8yModal","c8yAlert","c8yBase","gettext","$injector"],angular.module("c8y.users").component("c8yUserListView",{templateUrl:":::PLUGIN_PATH:::/userListView/userListView.html",controller:e,controllerAs:"vm"})}();
|
|
@@ -108,6 +108,18 @@
|
|
|
108
108
|
{{ 'Reload' | translate }}
|
|
109
109
|
</button>
|
|
110
110
|
</li>
|
|
111
|
+
|
|
112
|
+
<li ng-show="vm.canRevokeTokens">
|
|
113
|
+
<button
|
|
114
|
+
title="{{ 'Revoke tokens' | translate }}"
|
|
115
|
+
type="button"
|
|
116
|
+
class="btn btn-link"
|
|
117
|
+
ng-click="vm.revokeTokens()"
|
|
118
|
+
>
|
|
119
|
+
<i c8y-icon="account-disable"></i>
|
|
120
|
+
{{ 'Revoke tokens' | translate }}
|
|
121
|
+
</button>
|
|
122
|
+
</li>
|
|
111
123
|
</c8y-ui-action-bar-set>
|
|
112
124
|
|
|
113
125
|
<c8y-help src="/users-guide/administration/#managing-users"></c8y-help>
|