blob: dceb956d4b9d66bd2d9dfb839d5795582495f124 [file]
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
~ this work for additional information regarding copyright ownership.
~ The ASF licenses this file to You under the Apache License, Version 2.0
~ (the "License"); you may not use this file except in compliance with
~ the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
~
-->
<div fxLayout="row" class="page-container-padding">
<div
fxFlex="100"
fxLayout="column"
fxLayoutAlign="start start"
*ngIf="profileLoaded"
>
<sp-split-section
title="API Keys"
subtitle="Manage your API keys for third-party application access to
{{ appConstants.APP_NAME }}"
>
<div fxLayout="column" class="subsection">
<div class="subsection-title">New API key</div>
<mat-form-field fxFlex color="accent">
<mat-label>Name</mat-label>
<input
[(ngModel)]="newTokenName"
matInput
[formControl]="tokenNameFormControl"
/>
<mat-error
*ngIf="tokenNameFormControl.hasError('required')"
>
Token name is required.
</mat-error>
<mat-error
*ngIf="
tokenNameFormControl.hasError('minlength') ||
tokenNameFormControl.hasError('pattern')
"
>
Token name must be at least 3 characters long and
contain only alphanumeric characters, hyphens, or
underscores.
</mat-error>
</mat-form-field>
<div>
<button
class="mt-5"
mat-button
mat-flat-button
color="accent"
[disabled]="!tokenNameFormControl.valid"
(click)="requestNewKey()"
>
Create new API key
</button>
</div>
</div>
<div
fxLayout="column"
class="subsection mt-10"
*ngIf="newTokenCreated"
>
<div class="subsection-title">Key created</div>
<div class="subsection-small">
Your new API key has been created. Please copy the key now -
you won't be able to see the key again.
</div>
<div
fxFlex="100"
fxLayout="row"
fxLayoutAlign="start center"
class="new-token"
>
<div class="token-name">
{{ newlyCreatedToken.tokenName }}
</div>
<div class="displayed-token">
{{ newlyCreatedToken.rawToken }}
</div>
<button
mat-button
mat-flat-button
color="accent"
[cdkCopyToClipboard]="newlyCreatedToken.rawToken"
>
Copy
</button>
</div>
</div>
<mat-divider class="divider"></mat-divider>
<div fxLayout="column" class="subsection mt-10">
<div class="subsection-title">Existing API keys</div>
<div *ngIf="userData.userApiTokens.length === 0">
(no keys available)
</div>
<table
mat-table
[dataSource]="apiKeyDataSource"
class="mat-elevation-z0"
*ngIf="userData.userApiTokens.length > 0"
>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>Name</th>
<td mat-cell *matCellDef="let element">
{{ element.tokenName }}
</td>
</ng-container>
<!-- Name Column -->
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef>Action</th>
<td mat-cell *matCellDef="let element">
<div fxLayout="end end">
<button
mat-button
mat-flat-button
class="btn-warn"
(click)="revokeApiKey(element)"
>
Revoke
</button>
</div>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr
mat-row
*matRowDef="let row; columns: displayedColumns"
></tr>
</table>
</div>
</sp-split-section>
<mat-divider></mat-divider>
<sp-split-section
title="API Docs"
subtitle="View the documentation of the StreamPipes API. Here you can see all provided endpoints and how to query them."
>
<div fxLayout="column" class="subsection">
<div fxLayout="column" class="subsection mt-8"></div>
<div>
<button
mat-button
mat-flat-button
color="accent"
routerLink="/apidocs"
>
View API Docs
</button>
</div>
</div>
</sp-split-section>
</div>
</div>