mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-21 08:05:18 +08:00
* feat(auth): add node-admin API token scope Keep ordinary node-sync credentials unable to self-update a remote panel while allowing explicitly elevated node administrators to inherit synchronization access and invoke updatePanel. * style(docs): format API scope table * fix(auth): preserve mTLS node-sync semantics Allow only an explicit node-admin bearer to elevate a verified mTLS request. Existing admin, monitor, and node-sync bearer values continue to use the historical node-sync identity on mTLS connections. * chore(ci): rerun flaky checks --------- Co-authored-by: libmur-dev <[email protected]>
107 lines
1.6 KiB
CSS
107 lines
1.6 KiB
CSS
.api-token-section {
|
|
padding: 8px 20px 16px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 12px;
|
|
}
|
|
|
|
.api-token-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.api-token-hint {
|
|
margin: 0;
|
|
font-size: 12.5px;
|
|
opacity: 0.7;
|
|
flex: 1;
|
|
min-width: 200px;
|
|
}
|
|
|
|
.api-token-row {
|
|
border: 1px solid var(--ant-color-border-secondary);
|
|
border-radius: 8px;
|
|
padding: 10px 12px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
transition: opacity 0.15s;
|
|
}
|
|
|
|
.api-token-row.disabled {
|
|
opacity: 0.55;
|
|
}
|
|
|
|
.api-token-row-head {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.api-token-name-wrap {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
}
|
|
|
|
.api-token-name-line {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.api-token-name-line .ant-tag {
|
|
margin-inline-end: 0;
|
|
}
|
|
|
|
.api-token-name {
|
|
font-weight: 600;
|
|
font-size: 13.5px;
|
|
}
|
|
|
|
.api-token-created {
|
|
font-size: 11px;
|
|
opacity: 0.55;
|
|
}
|
|
|
|
.api-token-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.api-token-value-wrap {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.api-token-value {
|
|
flex: 1;
|
|
min-width: 0;
|
|
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
font-size: 12.5px;
|
|
padding: 4px 8px;
|
|
background: var(--ant-color-fill-tertiary);
|
|
border-radius: 4px;
|
|
word-break: break-all;
|
|
}
|
|
|
|
.api-token-created-notice {
|
|
margin: 0 0 12px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.security-actions {
|
|
padding: 12px 0;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|