mirror of
https://github.com/simon987/task_tracker.git
synced 2025-12-18 17:29:03 +00:00
Implement per-project webhook secret
This commit is contained in:
@@ -106,4 +106,12 @@ export class ApiService {
|
||||
return this.http.post(this.url + `/project/secret/${pid}`, {"secret": secret})
|
||||
}
|
||||
|
||||
getWebhookSecret(pid: number) {
|
||||
return this.http.get(this.url + `/project/webhook_secret/${pid}`,)
|
||||
}
|
||||
|
||||
setWebhookSecret(pid: number, secret: string) {
|
||||
return this.http.post(this.url + `/project/webhook_secret/${pid}`, {"webhook_secret": secret})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -51,4 +51,16 @@ export class ManagerRoleOnProject {
|
||||
this.role &= ~4
|
||||
}
|
||||
}
|
||||
|
||||
get secretRole(): boolean {
|
||||
return (this.role & 8) != 0
|
||||
}
|
||||
|
||||
set secretRole(role: boolean) {
|
||||
if (role) {
|
||||
this.role |= 8
|
||||
} else {
|
||||
this.role &= ~8
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -366,13 +366,14 @@ export class ProjectDashboardComponent implements OnInit {
|
||||
this.dialog.open(AreYouSureComponent, {
|
||||
width: '250px',
|
||||
}).afterClosed().subscribe(result => {
|
||||
if (result) {
|
||||
this.project.paused = paused;
|
||||
this.apiService.updateProject(this.project).subscribe(() => {
|
||||
this.translate.get("messenger.acknowledged").subscribe(t =>
|
||||
this.messenger.show(t))
|
||||
})
|
||||
}
|
||||
this.project.paused = paused;
|
||||
this.apiService.updateProject(this.project).subscribe(() => {
|
||||
this.translate.get("messenger.acknowledged").subscribe(t =>
|
||||
this.messenger.show(t))
|
||||
}, error => {
|
||||
this.translate.get("messenger.unauthorized").subscribe(t =>
|
||||
this.messenger.show(t))
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
<button mat-raised-button color="primary"
|
||||
*ngIf="authService.logged"
|
||||
[routerLink]="'/project/' + project.id + '/secret'">
|
||||
<mat-icon>security</mat-icon>
|
||||
{{"project.secret" | translate}}</button>
|
||||
</div>
|
||||
</mat-expansion-panel>
|
||||
|
||||
@@ -55,6 +55,10 @@
|
||||
(change)="onRoleChange(m)"
|
||||
[disabled]="m.manager.id==auth.account.id"
|
||||
>{{"perms.manage"|translate}}</mat-checkbox>
|
||||
<mat-checkbox [(ngModel)]="m.secretRole"
|
||||
(change)="onRoleChange(m)"
|
||||
[disabled]="m.manager.id==auth.account.id"
|
||||
>{{"perms.secret"|translate}}</mat-checkbox>
|
||||
</mat-list-item>
|
||||
</mat-list>
|
||||
</mat-card-content>
|
||||
|
||||
@@ -1,22 +1,47 @@
|
||||
<div class="container">
|
||||
<mat-card>
|
||||
<mat-card class="mat-elevation-z8">
|
||||
<button mat-button [title]="'perms.refresh' | translate" style="float:right"
|
||||
(click)="refresh()">
|
||||
<mat-icon>refresh</mat-icon>
|
||||
</button>
|
||||
<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-card-content>
|
||||
<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-content>
|
||||
<mat-card-actions>
|
||||
<button mat-raised-button color="primary"
|
||||
(click)="onUpdate()">{{"secret.update" | translate}}
|
||||
</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
|
||||
<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 style="margin-top: 2em" class="mat-elevation-z8">
|
||||
<mat-card-header>
|
||||
<mat-card-title>{{"secret.webhook_title" | translate}}</mat-card-title>
|
||||
<mat-card-subtitle>{{"secret.webhook_subtitle" | translate}}</mat-card-subtitle>
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>{{"secret.webhook_secret" | translate}}</mat-label>
|
||||
<textarea matInput [(ngModel)]="webhookSecret"
|
||||
[placeholder]="'secret.webhook_secret'|translate"
|
||||
name="webhook_secret"></textarea>
|
||||
</mat-form-field>
|
||||
</mat-card-content>
|
||||
|
||||
<mat-card-actions>
|
||||
<button mat-raised-button [routerLink]="'../'">Back</button>
|
||||
<button mat-raised-button color="primary"
|
||||
(click)="onUpdate()">{{"secret.update" | translate}}</button>
|
||||
(click)="onWebhookUpdate()">{{"secret.update" | translate}}</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
</div>
|
||||
|
||||
@@ -13,6 +13,7 @@ import {MessengerService} from "../messenger.service";
|
||||
export class ProjectSecretComponent implements OnInit {
|
||||
|
||||
secret: string;
|
||||
webhookSecret: string;
|
||||
projectId: number;
|
||||
|
||||
constructor(private auth: AuthService,
|
||||
@@ -26,6 +27,7 @@ export class ProjectSecretComponent implements OnInit {
|
||||
this.route.params.subscribe(params => {
|
||||
this.projectId = params["id"];
|
||||
this.getSecret();
|
||||
this.getWebhookSecret();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -37,10 +39,28 @@ export class ProjectSecretComponent implements OnInit {
|
||||
})
|
||||
}
|
||||
|
||||
getWebhookSecret() {
|
||||
this.apiService.getWebhookSecret(this.projectId).subscribe(data => {
|
||||
this.webhookSecret = data["content"]["webhook_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))
|
||||
})
|
||||
}
|
||||
|
||||
onWebhookUpdate() {
|
||||
this.apiService.setWebhookSecret(this.projectId, this.webhookSecret).subscribe(data => {
|
||||
this.translate.get("secret.ok").subscribe(t => this.messenger.show(t))
|
||||
})
|
||||
}
|
||||
|
||||
refresh() {
|
||||
this.getWebhookSecret();
|
||||
this.getSecret();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user