mirror of
https://github.com/goharbor/harbor.git
synced 2025-02-16 03:41:24 +01:00
commit
448555e952
@ -2,27 +2,27 @@
|
|||||||
<global-message [isAppLevel]="true"></global-message>
|
<global-message [isAppLevel]="true"></global-message>
|
||||||
<navigator (showAccountSettingsModal)="openModal($event)" (showPwdChangeModal)="openModal($event)"></navigator>
|
<navigator (showAccountSettingsModal)="openModal($event)" (showPwdChangeModal)="openModal($event)"></navigator>
|
||||||
<div class="content-container">
|
<div class="content-container">
|
||||||
<div class="content-area" [class.container-override]="showSearch" [class.content-area-override]="!shouldOverrideContent" [class.start-content-padding]="shouldOverrideContent">
|
<div class="content-area" [class.container-override]="showSearch" [class.content-area-override]="!shouldOverrideContent" [class.start-content-padding]="shouldOverrideContent">
|
||||||
<global-message [isAppLevel]="false"></global-message>
|
<global-message [isAppLevel]="false"></global-message>
|
||||||
<!-- Only appear when searching -->
|
<!-- Only appear when searching -->
|
||||||
<search-result></search-result>
|
<search-result></search-result>
|
||||||
<router-outlet></router-outlet>
|
<router-outlet></router-outlet>
|
||||||
</div>
|
</div>
|
||||||
<nav class="sidenav" style="padding: 12px 36px;" *ngIf="isUserExisting">
|
<nav class="sidenav" style="padding: 12px 36px;" *ngIf="isUserExisting">
|
||||||
<section class="sidenav-content">
|
<section class="sidenav-content">
|
||||||
<a routerLink="/harbor/projects" routerLinkActive="active" class="nav-link">{{'SIDE_NAV.PROJECTS' | translate}}</a>
|
<a routerLink="/harbor/projects" routerLinkActive="active" class="nav-link">{{'SIDE_NAV.PROJECTS' | translate}}</a>
|
||||||
<a routerLink="/harbor/logs" routerLinkActive="active" class="nav-link" style="margin-top: 4px;">{{'SIDE_NAV.LOGS' | translate}}</a>
|
<a routerLink="/harbor/logs" routerLinkActive="active" class="nav-link" style="margin-top: 4px;">{{'SIDE_NAV.LOGS' | translate}}</a>
|
||||||
<section class="nav-group collapsible" *ngIf="isSystemAdmin" style="margin-top: 4px;">
|
<section class="nav-group collapsible" *ngIf="isSystemAdmin" style="margin-top: 4px;">
|
||||||
<input id="tabsystem" type="checkbox">
|
<input id="tabsystem" type="checkbox">
|
||||||
<label for="tabsystem">{{'SIDE_NAV.SYSTEM_MGMT.NAME' | translate}}</label>
|
<label for="tabsystem">{{'SIDE_NAV.SYSTEM_MGMT.NAME' | translate}}</label>
|
||||||
<ul class="nav-list">
|
<ul class="nav-list">
|
||||||
<li><a class="nav-link" routerLink="/harbor/users" routerLinkActive="active">{{'SIDE_NAV.SYSTEM_MGMT.USER' | translate}}</a></li>
|
<li><a class="nav-link" routerLink="/harbor/users" routerLinkActive="active">{{'SIDE_NAV.SYSTEM_MGMT.USER' | translate}}</a></li>
|
||||||
<li><a class="nav-link" routerLink="/harbor/replications/endpoints" routerLinkActive="active">{{'SIDE_NAV.SYSTEM_MGMT.REPLICATION' | translate}}</a></li>
|
<li><a class="nav-link" routerLink="/harbor/replications/endpoints" routerLinkActive="active">{{'SIDE_NAV.SYSTEM_MGMT.REPLICATION' | translate}}</a></li>
|
||||||
<li><a class="nav-link" routerLink="/harbor/configs" routerLinkActive="active">{{'SIDE_NAV.SYSTEM_MGMT.CONFIG' | translate}}</a></li>
|
<li><a class="nav-link" routerLink="/harbor/configs" routerLinkActive="active">{{'SIDE_NAV.SYSTEM_MGMT.CONFIG' | translate}}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</clr-main-container>
|
</clr-main-container>
|
||||||
<account-settings-modal></account-settings-modal>
|
<account-settings-modal></account-settings-modal>
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
<option value="ldap_auth">{{'CONFIG.AUTH_MODE_LDAP' | translate }}</option>
|
<option value="ldap_auth">{{'CONFIG.AUTH_MODE_LDAP' | translate }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right">
|
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right" style="top: -1px;">
|
||||||
<clr-icon shape="info-circle" size="24" style="color: grey;"></clr-icon>
|
<clr-icon shape="info-circle" size="24" class="info-tips-icon"></clr-icon>
|
||||||
<span class="tooltip-content">{{'CONFIG.TOOLTIP.AUTH_MODE' | translate}}</span>
|
<span class="tooltip-content">{{'CONFIG.TOOLTIP.AUTH_MODE' | translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -39,8 +39,8 @@
|
|||||||
{{'TOOLTIP.ITEM_REQUIRED' | translate}}
|
{{'TOOLTIP.ITEM_REQUIRED' | translate}}
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right">
|
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right" style="top:-1px;">
|
||||||
<clr-icon shape="info-circle" style="color: grey;" size="24"></clr-icon>
|
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
|
||||||
<span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_SEARCH_DN' | translate}}</span>
|
<span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_SEARCH_DN' | translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -67,8 +67,8 @@
|
|||||||
{{'TOOLTIP.ITEM_REQUIRED' | translate}}
|
{{'TOOLTIP.ITEM_REQUIRED' | translate}}
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right">
|
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right" style="top: -1px;">
|
||||||
<clr-icon shape="info-circle" style="color: grey;" size="24"></clr-icon>
|
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
|
||||||
<span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_BASE_DN' | translate}}</span>
|
<span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_BASE_DN' | translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -94,8 +94,8 @@
|
|||||||
{{'TOOLTIP.ITEM_REQUIRED' | translate}}
|
{{'TOOLTIP.ITEM_REQUIRED' | translate}}
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right">
|
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right" style="top: -1px;">
|
||||||
<clr-icon shape="info-circle" style="color: grey;" size="24"></clr-icon>
|
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
|
||||||
<span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_UID' | translate}}</span>
|
<span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_UID' | translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -108,8 +108,8 @@
|
|||||||
<option value="3">{{'CONFIG.SCOPE_SUBTREE' | translate }}</option>
|
<option value="3">{{'CONFIG.SCOPE_SUBTREE' | translate }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right">
|
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right" style="top:-1px;">
|
||||||
<clr-icon shape="info-circle" style="color: grey;" size="24"></clr-icon>
|
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
|
||||||
<span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_SCOPE' | translate}}</span>
|
<span class="tooltip-content">{{'CONFIG.TOOLTIP.LDAP_SCOPE' | translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -123,16 +123,16 @@
|
|||||||
<option value="adminonly">{{'CONFIG.PRO_CREATION_ADMIN' | translate }}</option>
|
<option value="adminonly">{{'CONFIG.PRO_CREATION_ADMIN' | translate }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right">
|
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right" style="top: -1px;">
|
||||||
<clr-icon shape="info-circle" style="color: grey;" size="24"></clr-icon>
|
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
|
||||||
<span class="tooltip-content">{{'CONFIG.TOOLTIP.PRO_CREATION_RESTRICTION' | translate}}</span>
|
<span class="tooltip-content">{{'CONFIG.TOOLTIP.PRO_CREATION_RESTRICTION' | translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group" *ngIf="showSelfReg">
|
<div class="form-group" *ngIf="showSelfReg">
|
||||||
<label for="selfReg">{{'CONFIG.SELF_REGISTRATION' | translate}}</label>
|
<label for="selfReg">{{'CONFIG.SELF_REGISTRATION' | translate}}</label>
|
||||||
<clr-checkbox name="selfReg" id="selfReg" [(ngModel)]="currentConfig.self_registration.value" [disabled]="disabled(currentConfig.self_registration)">
|
<clr-checkbox name="selfReg" id="selfReg" [(ngModel)]="currentConfig.self_registration.value" [disabled]="disabled(currentConfig.self_registration)">
|
||||||
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right" style="top:-8px;">
|
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right" style="top:-7px;">
|
||||||
<clr-icon shape="info-circle" style="color: grey;" size="24"></clr-icon>
|
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
|
||||||
<span class="tooltip-content">{{'CONFIG.TOOLTIP.SELF_REGISTRATION' | translate}}</span>
|
<span class="tooltip-content">{{'CONFIG.TOOLTIP.SELF_REGISTRATION' | translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
</clr-checkbox>
|
</clr-checkbox>
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
.custom-h2 {
|
.custom-h2 {
|
||||||
margin-top: 0px !important;
|
margin-top: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-tips-icon {
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-tips-icon:hover {
|
||||||
|
color: #007CBB;
|
||||||
}
|
}
|
@ -26,7 +26,7 @@
|
|||||||
<label for="verifyRemoteCert">{{'CONFIG.VERIFY_REMOTE_CERT' | translate }}</label>
|
<label for="verifyRemoteCert">{{'CONFIG.VERIFY_REMOTE_CERT' | translate }}</label>
|
||||||
<clr-checkbox name="verifyRemoteCert" id="verifyRemoteCert" [(ngModel)]="allConfig.verify_remote_cert.value" [disabled]="disabled(allConfig.verify_remote_cert)">
|
<clr-checkbox name="verifyRemoteCert" id="verifyRemoteCert" [(ngModel)]="allConfig.verify_remote_cert.value" [disabled]="disabled(allConfig.verify_remote_cert)">
|
||||||
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-lg tooltip-top-right" style="top:-8px;">
|
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-lg tooltip-top-right" style="top:-8px;">
|
||||||
<clr-icon shape="info-circle" style="color: grey;" size="24"></clr-icon>
|
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
|
||||||
<span class="tooltip-content">{{'CONFIG.TOOLTIP.VERIFY_REMOTE_CERT' | translate }}</span>
|
<span class="tooltip-content">{{'CONFIG.TOOLTIP.VERIFY_REMOTE_CERT' | translate }}</span>
|
||||||
</a>
|
</a>
|
||||||
</clr-checkbox>
|
</clr-checkbox>
|
||||||
@ -53,7 +53,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right">
|
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right">
|
||||||
<clr-icon shape="info-circle" style="color: grey;" size="24"></clr-icon>
|
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
|
||||||
<span class="tooltip-content">{{'CONFIG.TOOLTIP.TOKEN_EXPIRATION' | translate}}</span>
|
<span class="tooltip-content">{{'CONFIG.TOOLTIP.TOKEN_EXPIRATION' | translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -62,8 +62,8 @@
|
|||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="selfReg">{{'CONFIG.MAIL_SSL' | translate}}</label>
|
<label for="selfReg">{{'CONFIG.MAIL_SSL' | translate}}</label>
|
||||||
<clr-checkbox name="emailSSL" id="emailSSL" [(ngModel)]="currentConfig.email_ssl.value" [disabled]="disabled(currentConfig.email_ssl)">
|
<clr-checkbox name="emailSSL" id="emailSSL" [(ngModel)]="currentConfig.email_ssl.value" [disabled]="disabled(currentConfig.email_ssl)">
|
||||||
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right" style="top:-8px;">
|
<a href="javascript:void(0)" role="tooltip" aria-haspopup="true" class="tooltip tooltip-top-right" style="top:-7px;">
|
||||||
<clr-icon shape="info-circle" style="color: grey;" size="24"></clr-icon>
|
<clr-icon shape="info-circle" class="info-tips-icon" size="24"></clr-icon>
|
||||||
<span class="tooltip-content">{{'CONFIG.SSL_TOOLTIP' | translate}}</span>
|
<span class="tooltip-content">{{'CONFIG.SSL_TOOLTIP' | translate}}</span>
|
||||||
</a>
|
</a>
|
||||||
</clr-checkbox>
|
</clr-checkbox>
|
||||||
|
@ -44,7 +44,11 @@ const harborRoutes: Routes = [
|
|||||||
canActivateChild: [AuthCheckGuard],
|
canActivateChild: [AuthCheckGuard],
|
||||||
children: [
|
children: [
|
||||||
{ path: '', redirectTo: 'sign-in', pathMatch: 'full' },
|
{ path: '', redirectTo: 'sign-in', pathMatch: 'full' },
|
||||||
{ path: 'sign-in', component: SignInComponent, canActivate: [SignInGuard] },
|
{
|
||||||
|
path: 'sign-in',
|
||||||
|
component: SignInComponent,
|
||||||
|
canActivate: [SignInGuard]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'projects',
|
path: 'projects',
|
||||||
component: ProjectComponent
|
component: ProjectComponent
|
||||||
|
@ -7,12 +7,20 @@ import {
|
|||||||
} from '@angular/router';
|
} from '@angular/router';
|
||||||
import { SessionService } from '../../shared/session.service';
|
import { SessionService } from '../../shared/session.service';
|
||||||
import { CommonRoutes } from '../../shared/shared.const';
|
import { CommonRoutes } from '../../shared/shared.const';
|
||||||
|
//import * as $ from 'jquery';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class SignInGuard implements CanActivate, CanActivateChild {
|
export class SignInGuard implements CanActivate, CanActivateChild {
|
||||||
constructor(private authService: SessionService, private router: Router) { }
|
constructor(private authService: SessionService, private router: Router) { }
|
||||||
|
|
||||||
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> | boolean {
|
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> | boolean {
|
||||||
|
//Fix overflow issue
|
||||||
|
/*let body = $(document.body);
|
||||||
|
if(body){
|
||||||
|
body.css({
|
||||||
|
"overflow-y": "hidden"
|
||||||
|
});
|
||||||
|
}*/
|
||||||
//If user has logged in, should not login again
|
//If user has logged in, should not login again
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
//If signout appended
|
//If signout appended
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
.statistic-data {
|
.statistic-data {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
font-family: 'Metropolis,"Avenir Next","Helvetica Neue",Arial,sans-serif';
|
font-family: Metropolis, "Avenir Next", "Helvetica Neue", Arial, sans-serif;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,7 +18,7 @@
|
|||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
line-height: 10px;
|
line-height: 10px;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-family: 'Metropolis,"Avenir Next","Helvetica Neue",Arial,sans-serif';
|
font-family: Metropolis, "Avenir Next", "Helvetica Neue", Arial, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.statistic-column-block {
|
.statistic-column-block {
|
||||||
@ -30,7 +30,7 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: 'Metropolis,"Avenir Next","Helvetica Neue",Arial,sans-serif';
|
font-family: Metropolis, "Avenir Next", "Helvetica Neue", Arial, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.statistic-column-title-pro {
|
.statistic-column-title-pro {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
<link rel="icon" type="image/x-icon" href="favicon.ico?v=2">
|
<link rel="icon" type="image/x-icon" href="favicon.ico?v=2">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body style="overflow-y: hidden;">
|
||||||
<harbor-app>
|
<harbor-app>
|
||||||
<div class="spinner spinner-lg app-loading">
|
<div class="spinner spinner-lg app-loading">
|
||||||
Loading...
|
Loading...
|
||||||
|
Loading…
Reference in New Issue
Block a user