mirror of
https://github.com/goharbor/harbor.git
synced 2025-02-08 07:51:25 +01:00
Merge latest codes.
This commit is contained in:
commit
cef202cb54
@ -65,8 +65,12 @@ func TestMain(t *testing.T) {
|
|||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
beego.BeeApp.Handlers.ServeHTTP(w, r)
|
beego.BeeApp.Handlers.ServeHTTP(w, r)
|
||||||
assert.Equal(int(200), w.Code, "'/' httpStatusCode should be 200")
|
assert.Equal(int(200), w.Code, "'/' httpStatusCode should be 200")
|
||||||
|
<<<<<<< HEAD
|
||||||
<<<<<<< HEAD
|
<<<<<<< HEAD
|
||||||
assert.Equal(true, strings.Contains(fmt.Sprintf("%s", w.Body), "<title>page_title_index</title>"), "http respond should have '<title>page_title_index</title>'")
|
assert.Equal(true, strings.Contains(fmt.Sprintf("%s", w.Body), "<title>page_title_index</title>"), "http respond should have '<title>page_title_index</title>'")
|
||||||
|
=======
|
||||||
|
assert.Equal(true, strings.Contains(fmt.Sprintf("%s", w.Body), "<title>Harbor</title>"), "http respond should have '<title>Harbor</title>'")
|
||||||
|
>>>>>>> upstream/dev
|
||||||
=======
|
=======
|
||||||
assert.Equal(true, strings.Contains(fmt.Sprintf("%s", w.Body), "<title>Harbor</title>"), "http respond should have '<title>Harbor</title>'")
|
assert.Equal(true, strings.Contains(fmt.Sprintf("%s", w.Body), "<title>Harbor</title>"), "http respond should have '<title>Harbor</title>'")
|
||||||
>>>>>>> upstream/dev
|
>>>>>>> upstream/dev
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>Clarity Seed App</title>
|
<title>Harbor</title>
|
||||||
<base href="/">
|
<base href="/">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link rel="icon" type="image/x-icon" href="favicon.ico?v=2">
|
<link rel="icon" type="image/x-icon" href="favicon.ico?v=2">
|
||||||
|
@ -7,6 +7,7 @@ import { CookieService } from 'angular2-cookie/core';
|
|||||||
import { CookieKeyOfAdmiral, HarborQueryParamKey } from './shared/shared.const';
|
import { CookieKeyOfAdmiral, HarborQueryParamKey } from './shared/shared.const';
|
||||||
import { maintainUrlQueryParmas } from './shared/shared.utils';
|
import { maintainUrlQueryParmas } from './shared/shared.utils';
|
||||||
|
|
||||||
|
|
||||||
export const systemInfoEndpoint = "/api/systeminfo";
|
export const systemInfoEndpoint = "/api/systeminfo";
|
||||||
/**
|
/**
|
||||||
* Declare service to handle the bootstrap options
|
* Declare service to handle the bootstrap options
|
||||||
@ -49,6 +50,7 @@ export class AppConfigService {
|
|||||||
//Catch the error
|
//Catch the error
|
||||||
console.error("Failed to load bootstrap options with error: ", error);
|
console.error("Failed to load bootstrap options with error: ", error);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public getConfig(): AppConfig {
|
public getConfig(): AppConfig {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { Component, EventEmitter, Output, ViewChild, AfterViewChecked } from '@angular/core';
|
import { Component, EventEmitter, Output, ViewChild, AfterViewChecked } from '@angular/core';
|
||||||
|
|
||||||
import { Response } from '@angular/http';
|
import { Response } from '@angular/http';
|
||||||
import { NgForm } from '@angular/forms';
|
import { NgForm } from '@angular/forms';
|
||||||
|
|
||||||
@ -29,6 +30,7 @@ export class CreateProjectComponent implements AfterViewChecked {
|
|||||||
|
|
||||||
createProjectOpened: boolean;
|
createProjectOpened: boolean;
|
||||||
|
|
||||||
|
|
||||||
hasChanged: boolean;
|
hasChanged: boolean;
|
||||||
|
|
||||||
@Output() create = new EventEmitter<boolean>();
|
@Output() create = new EventEmitter<boolean>();
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<clr-datagrid (clrDgRefresh)="refresh($event)">
|
<clr-datagrid (clrDgRefresh)="refresh($event)" >
|
||||||
<clr-dg-column>{{'PROJECT.NAME' | translate}}</clr-dg-column>
|
<clr-dg-column>{{'PROJECT.NAME' | translate}}</clr-dg-column>
|
||||||
<clr-dg-column>{{'PROJECT.PUBLIC_OR_PRIVATE' | translate}}</clr-dg-column>
|
<clr-dg-column>{{'PROJECT.PUBLIC_OR_PRIVATE' | translate}}</clr-dg-column>
|
||||||
<clr-dg-column>{{'PROJECT.REPO_COUNT'| translate}}</clr-dg-column>
|
<clr-dg-column>{{'PROJECT.REPO_COUNT'| translate}}</clr-dg-column>
|
||||||
@ -19,5 +19,5 @@
|
|||||||
<clr-dg-footer>
|
<clr-dg-footer>
|
||||||
{{totalRecordCount || (projects ? projects.length : 0)}} {{'PROJECT.ITEMS' | translate}}
|
{{totalRecordCount || (projects ? projects.length : 0)}} {{'PROJECT.ITEMS' | translate}}
|
||||||
<clr-dg-pagination [clrDgPageSize]="pageOffset" [clrDgTotalItems]="totalPage"></clr-dg-pagination>
|
<clr-dg-pagination [clrDgPageSize]="pageOffset" [clrDgTotalItems]="totalPage"></clr-dg-pagination>
|
||||||
</clr-dg-footer>
|
</clr-dg-footer>
|
||||||
</clr-datagrid>
|
</clr-datagrid>
|
||||||
|
@ -30,4 +30,28 @@
|
|||||||
<clr-dg-footer>{{ (members ? members.length : 0) }} {{'MEMBER.ITEMS' | translate}}</clr-dg-footer>
|
<clr-dg-footer>{{ (members ? members.length : 0) }} {{'MEMBER.ITEMS' | translate}}</clr-dg-footer>
|
||||||
</clr-datagrid>
|
</clr-datagrid>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-12 col-md-12 datagrid-margin-top">
|
||||||
|
<clr-datagrid>
|
||||||
|
<clr-dg-column>{{'MEMBER.NAME' | translate}}</clr-dg-column>
|
||||||
|
<clr-dg-column>{{'MEMBER.ROLE' | translate}}</clr-dg-column>
|
||||||
|
<clr-dg-column style="width: 12px;" class="datagrid-column-ext"></clr-dg-column>
|
||||||
|
<clr-dg-row *ngFor="let u of members">
|
||||||
|
<clr-dg-cell>{{u.username}}</clr-dg-cell>
|
||||||
|
<clr-dg-cell>
|
||||||
|
{{roleInfo[u.role_id] | translate}}
|
||||||
|
</clr-dg-cell>
|
||||||
|
<clr-dg-cell>
|
||||||
|
<harbor-action-overflow [hidden]="u.user_id === currentUser.user_id" class="habor-action-pos">
|
||||||
|
<a href="javascript:void(0)" class="dropdown-item" (click)="changeRole(u.user_id, 1)">{{'MEMBER.PROJECT_ADMIN' | translate}}</a>
|
||||||
|
<a href="javascript:void(0)" class="dropdown-item" (click)="changeRole(u.user_id, 2)">{{'MEMBER.DEVELOPER' | translate}}</a>
|
||||||
|
<a href="javascript:void(0)" class="dropdown-item" (click)="changeRole(u.user_id, 3)">{{'MEMBER.GUEST' | translate}}</a>
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
<a href="javascript:void(0)" class="dropdown-item" (click)="deleteMember(u.user_id)">{{'MEMBER.DELETE' | translate}}</a>
|
||||||
|
</harbor-action-overflow>
|
||||||
|
</clr-dg-cell>
|
||||||
|
</clr-dg-row>
|
||||||
|
<clr-dg-footer>{{ (members ? members.length : 0) }} {{'MEMBER.ITEMS' | translate}}</clr-dg-footer>
|
||||||
|
</clr-datagrid>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
@ -6,11 +6,13 @@ import {
|
|||||||
CanActivateChild,
|
CanActivateChild,
|
||||||
NavigationExtras
|
NavigationExtras
|
||||||
} from '@angular/router';
|
} from '@angular/router';
|
||||||
|
|
||||||
import { SessionService } from '../../shared/session.service';
|
import { SessionService } from '../../shared/session.service';
|
||||||
import { CommonRoutes, AdmiralQueryParamKey } from '../../shared/shared.const';
|
import { CommonRoutes, AdmiralQueryParamKey } from '../../shared/shared.const';
|
||||||
import { AppConfigService } from '../../app-config.service';
|
import { AppConfigService } from '../../app-config.service';
|
||||||
import { maintainUrlQueryParmas } from '../../shared/shared.utils';
|
import { maintainUrlQueryParmas } from '../../shared/shared.utils';
|
||||||
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AuthCheckGuard implements CanActivate, CanActivateChild {
|
export class AuthCheckGuard implements CanActivate, CanActivateChild {
|
||||||
constructor(
|
constructor(
|
||||||
@ -48,6 +50,7 @@ export class AuthCheckGuard implements CanActivate, CanActivateChild {
|
|||||||
|
|
||||||
this.router.navigateByUrl(keyRemovedUrl);
|
this.router.navigateByUrl(keyRemovedUrl);
|
||||||
return resolve(false);
|
return resolve(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,11 +268,7 @@
|
|||||||
"DELETION_TITLE_TAG": "Confirm Tag Deletion",
|
"DELETION_TITLE_TAG": "Confirm Tag Deletion",
|
||||||
"DELETION_SUMMARY_TAG": "Do you want to delete tag {{param}}?",
|
"DELETION_SUMMARY_TAG": "Do you want to delete tag {{param}}?",
|
||||||
"DELETION_TITLE_TAG_DENIED": "Signed Tag can't be deleted",
|
"DELETION_TITLE_TAG_DENIED": "Signed Tag can't be deleted",
|
||||||
<<<<<<< HEAD:src/ui_ng/src/ng/i18n/lang/en-lang.json
|
|
||||||
"DELETION_SUMMARY_TAG_DENIED": "The tag must be removed from Notary before they can be deleted.",
|
|
||||||
=======
|
|
||||||
"DELETION_SUMMARY_TAG_DENIED": "The tag must be removed from the Notary before it can be deleted.",
|
"DELETION_SUMMARY_TAG_DENIED": "The tag must be removed from the Notary before it can be deleted.",
|
||||||
>>>>>>> upstream/dev:src/ui_ng/src/i18n/lang/en-lang.json
|
|
||||||
"FILTER_FOR_REPOSITORIES": "Filter for repositories",
|
"FILTER_FOR_REPOSITORIES": "Filter for repositories",
|
||||||
"TAG": "Tag",
|
"TAG": "Tag",
|
||||||
"SIGNED": "Signed",
|
"SIGNED": "Signed",
|
||||||
|
Loading…
Reference in New Issue
Block a user