⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.72
Server IP:
41.128.143.86
Server:
Linux host.raqmix.cloud 6.8.0-1025-azure #30~22.04.1-Ubuntu SMP Wed Mar 12 15:28:20 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.3.23
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
proc
/
self
/
root
/
usr
/
share
/
grafana
/
public
/
build
/
View File Name :
ServiceAccountsPage.baaa08c045390c05e276.js
"use strict";(self.webpackChunkgrafana=self.webpackChunkgrafana||[]).push([[6777],{74409:(oe,M,n)=>{n.r(M),n.d(M,{ServiceAccountsListPageUnconnected:()=>K,default:()=>le,getStyles:()=>Z});var o=n(32196),l=n(55127),y=n.n(l),e=n(96540),h=n(69733),m=n(40845),r=n(55852),P=n(14186),V=n(67647),g=n(94354),A=n(67061),L=n(19384),O=n(96374),j=n(7521),R=n(36830),N=n(2913),i=n(10096),c=n(80348),s=n(98788),a=n(70255),x=n(14578),u=n(29158),p=n(72129),B=n(89062),$=n(5133);const v=t=>`Edit service account's ${t} details`,I=(0,e.memo)(({serviceAccount:t,onRoleChange:f,roleOptions:te,onRemoveButtonClick:J,onDisable:Q,onEnable:ne,onAddTokenClick:q})=>{const b=`org/serviceaccounts/${t.id}`,C=(0,m.of)(U),w=i.TP.hasPermissionInMetadata(c.AccessControlAction.ServiceAccountsWrite,t),_=i.TP.hasPermission(c.AccessControlAction.ActionRolesList)&&i.TP.hasPermission(c.AccessControlAction.ActionUserRolesList);return e.createElement("tr",{key:t.id,className:(0,o.cx)({[C.disabled]:t.isDisabled})},e.createElement("td",{className:"width-4 text-center link-td"},e.createElement("a",{href:b,"aria-label":v(t.name)},e.createElement("img",{className:"filter-table__avatar",src:t.avatarUrl,alt:`Avatar for user ${t.name}`}))),e.createElement("td",{className:"link-td max-width-10"},e.createElement("a",{className:"ellipsis",href:b,title:t.name,"aria-label":v(t.name)},t.name)),e.createElement("td",{className:"link-td max-width-10"},e.createElement("a",{className:C.accountId,href:b,title:t.login,"aria-label":v(t.name)},t.login)),i.TP.licensedAccessControlEnabled()?e.createElement("td",null,_&&e.createElement(B.y,{userId:t.id,orgId:t.orgId,basicRole:t.role,roles:t.roles||[],onBasicRoleChange:Y=>f(Y,t),roleOptions:te,basicRoleDisabled:!w,disabled:t.isExternal||t.isDisabled,width:40})):e.createElement("td",null,e.createElement($.r,{"aria-label":"Role",value:t.role,disabled:t.isExternal||!w||t.isDisabled,onChange:Y=>f(Y,t)})),e.createElement("td",{className:"link-td max-width-10"},e.createElement("a",{className:"ellipsis",href:b,title:"Tokens","aria-label":v(t.name)},e.createElement("div",{className:(0,o.cx)(C.tokensInfo,{[C.tokensInfoSecondary]:!t.tokens})},e.createElement("span",null,e.createElement(x.I,{name:"key-skeleton-alt"})),t.tokens||"No tokens"))),e.createElement("td",null,!t.isExternal&&e.createElement(A.B,{alignItems:"center",justifyContent:"flex-end"},i.TP.hasPermission(c.AccessControlAction.ServiceAccountsWrite)&&!t.tokens&&e.createElement(r.$n,{onClick:()=>q(t),disabled:t.isDisabled,className:C.actionButton},"Add token"),i.TP.hasPermissionInMetadata(c.AccessControlAction.ServiceAccountsWrite,t)&&(t.isDisabled?e.createElement(r.$n,{variant:"primary",onClick:()=>ne(t),className:C.actionButton},"Enable"):e.createElement(r.$n,{variant:"secondary",onClick:()=>Q(t),className:C.actionButton},"Disable")),i.TP.hasPermissionInMetadata(c.AccessControlAction.ServiceAccountsDelete,t)&&e.createElement(u.K,{className:C.deleteButton,name:"trash-alt",size:"md",onClick:()=>J(t),tooltip:`Delete service account ${t.name}`})),t.isExternal&&e.createElement(A.B,{alignItems:"center",justifyContent:"flex-end"},e.createElement(u.K,{disabled:!0,name:"lock",size:"md",tooltip:"This is a managed service account and cannot be modified."}))))});I.displayName="ServiceAccountListItem";const W=({rootProps:t})=>{const f=(0,m.of)(T);return e.createElement("tr",{...t},e.createElement("td",{className:"width-4 text-center"},e.createElement(a.A,{containerClassName:f.blockSkeleton,circle:!0,width:25,height:25})),e.createElement("td",{className:"max-width-10"},e.createElement(a.A,{width:100})),e.createElement("td",{className:"max-width-10"},e.createElement(a.A,{width:100})),e.createElement("td",null,e.createElement(a.A,{containerClassName:f.blockSkeleton,width:"100%",height:32})),e.createElement("td",{className:"max-width-10"},e.createElement(a.A,{width:40})),e.createElement("td",null,e.createElement(A.B,{alignItems:"center",justifyContent:"flex-end"},e.createElement(a.A,{containerClassName:f.blockSkeleton,width:102,height:32}),e.createElement(a.A,{containerClassName:f.blockSkeleton,width:85,height:32}),e.createElement(a.A,{containerClassName:(0,o.cx)(f.blockSkeleton,f.deleteButton),width:16,height:16}))))},S=(0,p.j)(I,W),T=t=>({blockSkeleton:(0,o.css)({display:"block",lineHeight:1}),deleteButton:(0,o.css)({marginRight:t.spacing(.5)})}),U=t=>({iconRow:(0,o.css)({svg:{marginLeft:t.spacing(.5)}}),accountId:(0,o.cx)("ellipsis",(0,o.css)({color:t.colors.text.secondary})),deleteButton:(0,o.css)({color:t.colors.text.secondary}),tokensInfo:(0,o.css)({span:{marginRight:t.spacing(1)}}),tokensInfoSecondary:(0,o.css)({color:t.colors.text.secondary}),disabled:(0,o.css)({"td a":{color:t.colors.text.secondary}}),actionButton:(0,o.css)({minWidth:85})}),k=S;var D=n(12966);function H(t){return{...t.serviceAccounts}}const F={changePage:D.yd,changeQuery:D.nM,fetchACOptions:D.pJ,fetchServiceAccounts:D.iJ,deleteServiceAccount:D.W4,updateServiceAccount:D.mV,changeStateFilter:D.qS,createServiceAccountToken:D.yC},ee=(0,h.connect)(H,F),X=[{label:"All",value:c.ServiceAccountStateFilter.All},{label:"With expired tokens",value:c.ServiceAccountStateFilter.WithExpiredTokens},{label:"Disabled",value:c.ServiceAccountStateFilter.Disabled}];(N.Ay.featureToggles.externalServiceAccounts||N.Ay.featureToggles.externalServiceAuth)&&X.push({label:"Managed",value:c.ServiceAccountStateFilter.External});const K=({page:t,changePage:f,totalPages:te,serviceAccounts:J,isLoading:Q,roleOptions:ne,query:q,serviceAccountStateFilter:b,changeQuery:C,fetchACOptions:w,fetchServiceAccounts:_,deleteServiceAccount:Y,updateServiceAccount:ae,changeStateFilter:ge,createServiceAccountToken:ve})=>{const se=(0,m.of)(Z),[fe,ce]=(0,e.useState)(!1),[he,ie]=(0,e.useState)(!1),[pe,re]=(0,e.useState)(!1),[De,de]=(0,e.useState)(""),[E,z]=(0,e.useState)(null);(0,e.useEffect)(()=>{_({withLoadingIndicator:!0}),i.TP.licensedAccessControlEnabled()&&w()},[w,_]);const me=J.length===0&&b===c.ServiceAccountStateFilter.All&&!q,Ce=async(d,Re)=>{const Ne={...Re,role:d};ae(Ne),i.TP.licensedAccessControlEnabled()&&w()},ye=d=>{C(d)},Ae=d=>{ge(d)},Se=d=>{z(d),ie(!0)},Te=async()=>{E&&Y(E.id),ue()},Pe=d=>{z(d),re(!0)},xe=()=>{E&&ae({...E,isDisabled:!0}),Ee()},Ie=d=>{ae({...d,isDisabled:!1})},ke=d=>{z(d),ce(!0)},be=async d=>{E&&ve(E.id,d,de)},Me=()=>{ce(!1),z(null),de("")},ue=()=>{ie(!1),z(null)},Ee=()=>{re(!1),z(null)},Le=e.createElement("a",{className:"external-link",href:"https://grafana.com/docs/grafana/latest/administration/service-accounts/",target:"_blank",rel:"noopener noreferrer"},"documentation."),Oe=e.createElement("span",null,"Service accounts and their tokens can be used to authenticate against the Grafana API. Find out more in our"," ",Le);return e.createElement(R.Y,{navId:"serviceaccounts",subTitle:Oe,actions:e.createElement(e.Fragment,null,!me&&i.TP.hasPermission(c.AccessControlAction.ServiceAccountsCreate)&&e.createElement(r.z9,{href:"org/serviceaccounts/create",variant:"primary"},"Add service account"))},e.createElement(R.Y.Contents,null,e.createElement("div",{className:"page-action-bar"},e.createElement(P.I,{grow:!0},e.createElement(V.Z,{placeholder:"Search service account by name",value:q,onChange:ye,width:50})),e.createElement(g.z,{options:X,onChange:Ae,value:b,className:se.filter})),!Q&&me&&e.createElement(e.Fragment,null,e.createElement(j.A,{title:"You haven't created any service accounts yet.",buttonIcon:"key-skeleton-alt",buttonLink:"org/serviceaccounts/create",buttonTitle:"Add service account",buttonDisabled:!i.TP.hasPermission(c.AccessControlAction.ServiceAccountsCreate),proTip:"Remember, you can provide specific permissions for API access to other applications.",proTipLink:"",proTipLinkTitle:"",proTipTarget:"_blank"})),(Q||J.length!==0)&&e.createElement(e.Fragment,null,e.createElement("div",{className:(0,o.cx)(se.table,"admin-list-table")},e.createElement("table",{className:"filter-table filter-table--hover"},e.createElement("thead",null,e.createElement("tr",null,e.createElement("th",null),e.createElement("th",null,"Account"),e.createElement("th",null,"ID"),e.createElement("th",null,"Roles"),e.createElement("th",null,"Tokens"),e.createElement("th",{style:{width:"120px"}}))),e.createElement("tbody",null,Q?e.createElement(e.Fragment,null,e.createElement(k.Skeleton,null),e.createElement(k.Skeleton,null),e.createElement(k.Skeleton,null)):J.map(d=>e.createElement(k,{serviceAccount:d,key:d.id,roleOptions:ne,onRoleChange:Ce,onRemoveButtonClick:Se,onDisable:Pe,onEnable:Ie,onAddTokenClick:ke})))),e.createElement(A.B,{justifyContent:"flex-end"},e.createElement(L.d,{hideWhenSinglePage:!0,currentPage:t,numberOfPages:te,onNavigate:f})))),E&&e.createElement(e.Fragment,null,e.createElement(O.u,{isOpen:he,body:`Are you sure you want to delete '${E.name}'${E.tokens?` and ${E.tokens} accompanying ${y()("token",E.tokens)}`:""}?`,confirmText:"Delete",title:"Delete service account",onConfirm:Te,onDismiss:ue}),e.createElement(O.u,{isOpen:pe,title:"Disable service account",body:`Are you sure you want to disable '${E.name}'?`,confirmText:"Disable service account",onConfirm:xe,onDismiss:Ee}),e.createElement(s.z,{isOpen:fe,token:De,serviceAccountLogin:E.login,onCreateToken:be,onClose:Me}))))},Z=t=>({table:(0,o.css)({marginTop:t.spacing(3)}),filter:(0,o.css)({margin:`0 ${t.spacing(1)}`}),row:(0,o.css)({display:"flex",alignItems:"center",height:"100% !important",a:{padding:`${t.spacing(.5)} 0 !important`}}),unitTooltip:(0,o.css)({display:"flex",flexDirection:"column"}),unitItem:(0,o.css)({cursor:"pointer",padding:t.spacing(.5,0),marginRight:t.spacing(1)}),disabled:(0,o.css)({color:t.colors.text.disabled}),link:(0,o.css)({color:"inherit",cursor:"pointer",textDecoration:"underline"}),pageHeader:(0,o.css)({display:"flex",marginBottom:t.spacing(2)}),apiKeyInfoLabel:(0,o.css)({marginLeft:t.spacing(1),lineHeight:2.2,flexGrow:1,color:t.colors.text.secondary,span:{padding:t.spacing(.5)}}),filterDelimiter:(0,o.css)({flexGrow:1})}),le=ee(K)},98788:(oe,M,n)=>{n.d(M,{z:()=>j});var o=n(32196),l=n(96540),y=n(62938),e=n(32264),h=n(40845),m=n(37390),r=n(88575),P=n(10354),V=n(94354),g=n(98239),A=n(55852),L=n(10534);const O=[{label:"No expiration",value:!1},{label:"Set expiration date",value:!0}],j=({isOpen:i,token:c,serviceAccountLogin:s,onCreateToken:a,onClose:x})=>{const u=new Date;u.setDate(u.getDate()+1);const p=new Date;e.$.tokenExpirationDayLimit!==void 0&&e.$.tokenExpirationDayLimit>-1?p.setDate(p.getDate()+e.$.tokenExpirationDayLimit+1):p.setDate(864e13);const B=e.$.tokenExpirationDayLimit!==void 0&&e.$.tokenExpirationDayLimit>0,[$,v]=(0,l.useState)(""),[I,W]=(0,l.useState)(""),[S,T]=(0,l.useState)(B),[U,k]=(0,l.useState)(u),[D,H]=(0,l.useState)(U!==""),F=(0,h.of)(N);(0,l.useEffect)(()=>{i&&v(`${s}-${(0,y.A)()}`)},[s,i]);const ee=G=>{H(G!==""),k(G)},X=()=>{a({name:I||$,secondsToLive:S?R(U):void 0})},K=()=>{W(""),v(""),T(B),k(u),H(U!==""),x()},Z=c?"Service account token created":"Add service account token";return l.createElement(m.a,{isOpen:i,title:Z,onDismiss:K,className:F.modal,contentClassName:F.modalContent},c?l.createElement(l.Fragment,null,l.createElement(r.D,{label:"Token",description:"Copy the token now as you will not be able to see it again. Losing a token requires creating a new one."},l.createElement("div",{className:F.modalTokenRow},l.createElement(P.p,{name:"tokenValue",value:c,readOnly:!0}),l.createElement(L.b,{className:F.modalCopyToClipboardButton,variant:"primary",size:"md",icon:"copy",getText:()=>c},"Copy clipboard"))),l.createElement(m.a.ButtonRow,null,l.createElement(L.b,{variant:"primary",getText:()=>c,onClipboardCopy:K},"Copy to clipboard and close"),l.createElement(A.$n,{variant:"secondary",onClick:K},"Close"))):l.createElement("div",null,l.createElement(r.D,{label:"Display name",description:"Name to easily identify the token",required:!0},l.createElement(P.p,{name:"tokenName",value:I,placeholder:$,onChange:G=>{W(G.currentTarget.value)}})),l.createElement(r.D,{label:"Expiration"},l.createElement(V.z,{options:O,value:S,onChange:T,size:"md"})),S&&l.createElement(r.D,{label:"Expiration date"},l.createElement(g.l,{onChange:ee,value:U,placeholder:"",minDate:u,maxDate:p})),l.createElement(m.a.ButtonRow,null,l.createElement(A.$n,{onClick:X,disabled:S&&!D},"Generate token"))))},R=i=>{const c=new Date(i),s=new Date;return Math.ceil((c.getTime()-s.getTime())/1e3)},N=i=>({modal:(0,o.css)` width: 550px; `,modalContent:(0,o.css)` overflow: visible; `,modalTokenRow:(0,o.css)` display: flex; `,modalCopyToClipboardButton:(0,o.css)` margin-left: ${i.spacing(.5)}; `})},12966:(oe,M,n)=>{n.d(M,{W4:()=>O,iJ:()=>g,mV:()=>L,nM:()=>N,pJ:()=>V,qS:()=>i,yC:()=>j,yd:()=>c});var o=n(2543),l=n.n(o),y=n(17172),e=n(85927),h=n(16233),m=n(80348),r=n(1936);const P="/api/serviceaccounts";function V(){return async s=>{try{if(h.TP.licensedAccessControlEnabled()&&h.TP.hasPermission(m.AccessControlAction.ActionRolesList)){const a=await(0,e.RL)();s((0,r.ew)(a))}}catch(a){console.error(a)}}}function g({withLoadingIndicator:s}={withLoadingIndicator:!1}){return async(a,x)=>{try{if(h.TP.hasPermission(m.AccessControlAction.ServiceAccountsRead)){s&&a((0,r.FW)());const{perPage:u,page:p,query:B,serviceAccountStateFilter:$}=x().serviceAccounts,v=await(0,y.AI)().get(`/api/serviceaccounts/search?perpage=${u}&page=${p}&query=${B}${R($)}&accesscontrol=true`);if(h.TP.licensedAccessControlEnabled()&&h.TP.hasPermission(m.AccessControlAction.ActionUserRolesList)){a((0,r.dJ)());const I=h.TP.user.orgId,W=v?.serviceAccounts.map(T=>T.id),S=await(0,y.AI)().post("/api/access-control/users/roles/search",{userIds:W,orgId:I});v.serviceAccounts.forEach(T=>{T.roles=S?S[T.id]||[]:[]}),a((0,r.jE)())}a((0,r.zh)(v))}}catch(u){console.error(u)}finally{a((0,r.Yh)())}}}const A=(0,o.debounce)(s=>s(g()),500,{leading:!0});function L(s){return async a=>{await(0,y.AI)().patch(`${P}/${s.id}?accesscontrol=true`,{...s}),a(g())}}function O(s){return async a=>{await(0,y.AI)().delete(`${P}/${s}`),a(g())}}function j(s,a,x){return async u=>{const p=await(0,y.AI)().post(`${P}/${s}/tokens`,a);x(p.key),u(g())}}const R=s=>{switch(s){case m.ServiceAccountStateFilter.WithExpiredTokens:return"&expiredTokens=true";case m.ServiceAccountStateFilter.Disabled:return"&disabled=true";case m.ServiceAccountStateFilter.External:return"&external=true";default:return""}};function N(s){return async a=>{a((0,r.L5)(s)),A(a)}}function i(s){return async a=>{a((0,r.c3)(s)),a(g())}}function c(s){return async a=>{a((0,r.EC)(s)),a(g())}}}}]); //# sourceMappingURL=ServiceAccountsPage.baaa08c045390c05e276.js.map