mirror of
https://github.com/simon987/task_tracker.git
synced 2025-12-10 13:44:30 +00:00
Add project secret & bug fix
This commit is contained in:
@@ -6,7 +6,7 @@ import {Credentials} from "./models/credentials";
|
||||
@Injectable()
|
||||
export class ApiService {
|
||||
|
||||
private url: string = "http://localhost/api";
|
||||
public url: string = "http://localhost/api";
|
||||
private options: {
|
||||
withCredentials: true,
|
||||
responseType: "json"
|
||||
@@ -66,36 +66,44 @@ export class ApiService {
|
||||
}
|
||||
|
||||
getProjectAccess(project: number) {
|
||||
return this.http.get(this.url + `/project/access_list/${project}`)
|
||||
return this.http.get(this.url + `/project/access_list/${project}`, this.options)
|
||||
}
|
||||
|
||||
getManagerList() {
|
||||
return this.http.get(this.url + "/manager/list")
|
||||
return this.http.get(this.url + "/manager/list", this.options)
|
||||
}
|
||||
|
||||
getManagerListWithRoleOn(project: number) {
|
||||
return this.http.get(this.url + "/manager/list_for_project/" + project)
|
||||
return this.http.get(this.url + "/manager/list_for_project/" + project, this.options)
|
||||
}
|
||||
|
||||
promote(managerId: number) {
|
||||
return this.http.get(this.url + `/manager/promote/${managerId}`)
|
||||
return this.http.get(this.url + `/manager/promote/${managerId}`, this.options)
|
||||
}
|
||||
|
||||
demote(managerId: number) {
|
||||
return this.http.get(this.url + `/manager/demote/${managerId}`)
|
||||
return this.http.get(this.url + `/manager/demote/${managerId}`, this.options)
|
||||
}
|
||||
|
||||
acceptWorkerAccessRequest(wid: number, pid: number) {
|
||||
return this.http.post(this.url + `/project/accept_request/${pid}/${wid}`, null)
|
||||
return this.http.post(this.url + `/project/accept_request/${pid}/${wid}`, null, this.options)
|
||||
}
|
||||
|
||||
rejectWorkerAccessRequest(wid: number, pid: number) {
|
||||
return this.http.post(this.url + `/project/reject_request/${pid}/${wid}`, null)
|
||||
return this.http.post(this.url + `/project/reject_request/${pid}/${wid}`, null, this.options)
|
||||
}
|
||||
|
||||
setManagerRoleOnProject(pid: number, role: number, manager: number) {
|
||||
return this.http.post(this.url + `/manager/set_role_for_project/${pid}`,
|
||||
{"role": role, "manager": manager})
|
||||
{"role": role, "manager": manager}, this.options)
|
||||
}
|
||||
|
||||
getSecret(pid: number) {
|
||||
return this.http.get(this.url + `/project/secret/${pid}`,)
|
||||
}
|
||||
|
||||
setSecret(pid: number, secret: string) {
|
||||
return this.http.post(this.url + `/project/secret/${pid}`, {"secret": secret})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,8 +13,11 @@ import {AccountDetailsComponent} from "./account-details/account-details.compone
|
||||
import {WorkerDashboardComponent} from "./worker-dashboard/worker-dashboard.component";
|
||||
import {ProjectPermsComponent} from "./project-perms/project-perms.component";
|
||||
import {ManagerListComponent} from "./manager-list/manager-list.component";
|
||||
import {IndexComponent} from "./index/index.component";
|
||||
import {ProjectSecretComponent} from "./project-secret/project-secret.component";
|
||||
|
||||
const routes: Routes = [
|
||||
{path: "", component: IndexComponent},
|
||||
{path: "log", component: LogsComponent},
|
||||
{path: "login", component: LoginComponent},
|
||||
{path: "account", component: AccountDetailsComponent},
|
||||
@@ -22,9 +25,10 @@ const routes: Routes = [
|
||||
{path: "project/:id", component: ProjectDashboardComponent},
|
||||
{path: "project/:id/update", component: UpdateProjectComponent},
|
||||
{path: "project/:id/perms", component: ProjectPermsComponent},
|
||||
{path: "project/:id/secret", component: ProjectSecretComponent},
|
||||
{path: "new_project", component: CreateProjectComponent},
|
||||
{path: "workers", component: WorkerDashboardComponent},
|
||||
{path: "manager_list", component: ManagerListComponent}
|
||||
{path: "manager_list", component: ManagerListComponent},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
|
||||
@@ -27,6 +27,7 @@ import {
|
||||
MatSlideToggleModule,
|
||||
MatSnackBarModule,
|
||||
MatSortModule,
|
||||
MatStepperModule,
|
||||
MatTableModule,
|
||||
MatTabsModule,
|
||||
MatToolbarModule,
|
||||
@@ -52,6 +53,8 @@ import {ManagerListComponent} from './manager-list/manager-list.component';
|
||||
import {ProjectSelectComponent} from './project-select/project-select.component';
|
||||
import {ManagerSelectComponent} from './manager-select/manager-select.component';
|
||||
import {ProjectIconComponent} from './project-icon/project-icon.component';
|
||||
import {IndexComponent} from './index/index.component';
|
||||
import {ProjectSecretComponent} from './project-secret/project-secret.component';
|
||||
|
||||
|
||||
export function createTranslateLoader(http: HttpClient) {
|
||||
@@ -76,6 +79,8 @@ export function createTranslateLoader(http: HttpClient) {
|
||||
ProjectSelectComponent,
|
||||
ManagerSelectComponent,
|
||||
ProjectIconComponent,
|
||||
IndexComponent,
|
||||
ProjectSecretComponent,
|
||||
],
|
||||
imports: [
|
||||
BrowserModule,
|
||||
@@ -114,7 +119,8 @@ export function createTranslateLoader(http: HttpClient) {
|
||||
MatProgressBarModule,
|
||||
MatTabsModule,
|
||||
MatListModule,
|
||||
MatButtonToggleModule
|
||||
MatButtonToggleModule,
|
||||
MatStepperModule
|
||||
|
||||
],
|
||||
exports: [],
|
||||
|
||||
@@ -6,6 +6,7 @@ import {MatPaginator, MatSort, MatTableDataSource} from "@angular/material";
|
||||
|
||||
import * as moment from "moment"
|
||||
import {AuthService} from "../auth.service";
|
||||
import {Manager} from "../models/manager";
|
||||
|
||||
@Component({
|
||||
selector: 'app-manager-list',
|
||||
|
||||
@@ -56,11 +56,13 @@
|
||||
|
||||
</mat-card-content>
|
||||
<mat-card-actions>
|
||||
<!--TODO: auth-->
|
||||
<button mat-raised-button color="primary" *ngIf="project"
|
||||
<button mat-raised-button [routerLink]="'/projects'">Back</button>
|
||||
<button mat-raised-button color="primary" *ngIf="project && auth.logged"
|
||||
[routerLink]="'/project/' + project.id + '/update'">{{"project.update" | translate}}</button>
|
||||
<button mat-raised-button color="primary" *ngIf="project"
|
||||
<button mat-raised-button color="primary" *ngIf="project && auth.logged"
|
||||
[routerLink]="'/project/' + project.id + '/perms'">{{"project.perms" | translate}}</button>
|
||||
<button mat-raised-button color="primary" *ngIf="project && auth.logged"
|
||||
[routerLink]="'/project/' + project.id + '/secret'">{{"project.secret" | translate}}</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
</div>
|
||||
|
||||
@@ -7,6 +7,7 @@ import {Chart} from "chart.js";
|
||||
import {AssignedTasks, MonitoringSnapshot} from "../models/monitoring";
|
||||
import {TranslateService} from "@ngx-translate/core";
|
||||
import {MessengerService} from "../messenger.service";
|
||||
import {AuthService} from "../auth.service";
|
||||
|
||||
|
||||
@Component({
|
||||
@@ -46,6 +47,7 @@ export class ProjectDashboardComponent implements OnInit {
|
||||
constructor(private apiService: ApiService,
|
||||
private route: ActivatedRoute,
|
||||
private translate: TranslateService,
|
||||
public auth: AuthService,
|
||||
private messenger: MessengerService) {
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,10 @@
|
||||
*ngIf="authService.logged">
|
||||
<mat-icon>perm_identity</mat-icon>
|
||||
{{"project.perms" | translate}}</button>
|
||||
<button mat-raised-button color="primary"
|
||||
*ngIf="authService.logged"
|
||||
[routerLink]="'/project/' + project.id + '/secret'">
|
||||
{{"project.secret" | translate}}</button>
|
||||
</div>
|
||||
</mat-expansion-panel>
|
||||
<span *ngIf="projects && projects.length == 0">
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<mat-card-subtitle>{{"perms.subtitle" | translate}}</mat-card-subtitle>
|
||||
</mat-card-header>
|
||||
|
||||
<mat-card-content *ngIf="!unauthorized || !auth.account">
|
||||
<mat-card-content *ngIf="!(unauthorized || !auth.account)">
|
||||
<h3>{{"perms.workers" | translate}}</h3>
|
||||
<mat-list *ngIf="accesses && accesses.length>0">
|
||||
<mat-list-item *ngFor="let wa of accesses" [class.request]="wa.request">
|
||||
@@ -65,5 +65,8 @@
|
||||
</p>
|
||||
</mat-card-content>
|
||||
|
||||
<mat-card-actions>
|
||||
<button mat-raised-button [routerLink]="'../'">Back</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
.mat-form-field {
|
||||
width: 100%;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<div class="container">
|
||||
<mat-card>
|
||||
<mat-card-header>
|
||||
<mat-card-title>{{"secret.title" | translate}}</mat-card-title>
|
||||
<mat-card-subtitle>{{"secret.subtitle" | translate}}</mat-card-subtitle>
|
||||
</mat-card-header>
|
||||
|
||||
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>{{"secret.secret" | translate}}</mat-label>
|
||||
<textarea matInput [(ngModel)]="secret"
|
||||
[placeholder]="'secret.secret'|translate"
|
||||
name="secret"></textarea>
|
||||
</mat-form-field>
|
||||
|
||||
<mat-card-actions>
|
||||
<button mat-raised-button [routerLink]="'../'">Back</button>
|
||||
<button mat-raised-button color="primary"
|
||||
(click)="onUpdate()">{{"secret.update" | translate}}</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
</div>
|
||||
@@ -0,0 +1,46 @@
|
||||
import {Component, OnInit} from '@angular/core';
|
||||
import {AuthService} from "../auth.service";
|
||||
import {ApiService} from "../api.service";
|
||||
import {ActivatedRoute} from "@angular/router";
|
||||
import {TranslateService} from "@ngx-translate/core";
|
||||
import {MessengerService} from "../messenger.service";
|
||||
|
||||
@Component({
|
||||
selector: 'app-project-secret',
|
||||
templateUrl: './project-secret.component.html',
|
||||
styleUrls: ['./project-secret.component.css']
|
||||
})
|
||||
export class ProjectSecretComponent implements OnInit {
|
||||
|
||||
secret: string;
|
||||
projectId: number;
|
||||
|
||||
constructor(private auth: AuthService,
|
||||
private apiService: ApiService,
|
||||
private translate: TranslateService,
|
||||
private messenger: MessengerService,
|
||||
private route: ActivatedRoute) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.route.params.subscribe(params => {
|
||||
this.projectId = params["id"];
|
||||
this.getSecret();
|
||||
});
|
||||
}
|
||||
|
||||
getSecret() {
|
||||
this.apiService.getSecret(this.projectId).subscribe(data => {
|
||||
this.secret = data["content"]["secret"]
|
||||
}, error => {
|
||||
this.translate.get("messenger.unauthorized").subscribe(t => this.messenger.show(t))
|
||||
})
|
||||
}
|
||||
|
||||
onUpdate() {
|
||||
this.apiService.setSecret(this.projectId, this.secret).subscribe(data => {
|
||||
this.translate.get("secret.ok").subscribe(t => this.messenger.show(t))
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,7 @@
|
||||
</form>
|
||||
</mat-card-content>
|
||||
<mat-card-actions>
|
||||
<button mat-raised-button [routerLink]="'../'">Back</button>
|
||||
<button type="submit" form="uf" mat-raised-button color="primary">{{"project.update" | translate}}</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
|
||||
@@ -67,7 +67,8 @@
|
||||
"perms": "Permissions",
|
||||
"chain": "Chain tasks to",
|
||||
"manager_select": "Give access to manager",
|
||||
"version": "Git version (commit hash)"
|
||||
"version": "Git version (commit hash)",
|
||||
"secret": "Secret"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Dashboard for",
|
||||
@@ -137,5 +138,16 @@
|
||||
"project_select": {
|
||||
"list_loading": "Loading project list...",
|
||||
"none": "None"
|
||||
},
|
||||
"index": {
|
||||
"version": "Latest commit hash here",
|
||||
"alias": "Relevent alias"
|
||||
},
|
||||
"secret": {
|
||||
"title": "Project secret",
|
||||
"subtitle": "You can set project configuration here. It is only accessible by workers with ASSIGN access to this project",
|
||||
"secret": "Secret",
|
||||
"update": "Update",
|
||||
"ok": "Updated"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +118,8 @@
|
||||
"set": "Changements enregistrés",
|
||||
"workers": "Workers",
|
||||
"no_workers": "Aucun Worker n'a explicitement accès à ce projet",
|
||||
"managers": "Managers"
|
||||
"managers": "Managers",
|
||||
"secret": "Secret"
|
||||
},
|
||||
"messenger": {
|
||||
"close": "Fermer",
|
||||
@@ -139,6 +140,17 @@
|
||||
"project_select": {
|
||||
"list_loading": "Chargement de la liste de projets...",
|
||||
"none": "Aucun"
|
||||
},
|
||||
"index": {
|
||||
"version": "Le dernier hash de commit",
|
||||
"alias": "Alias pertinent"
|
||||
},
|
||||
"secret": {
|
||||
"title": "Secret",
|
||||
"subtitle": "Vous pouvez définir la configuration du projet ici. Ce n'est accessible que par les Workers ayant accès au projet",
|
||||
"secret": "Secret",
|
||||
"update": "Mettre à jour",
|
||||
"ok": "Mis à jour"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user