abstruse
Version:
Abstruse CI
268 lines (257 loc) • 13.7 kB
HTML
<app-header></app-header>
<div class="container" *ngIf="loading">
<img src="/assets/images/icons/flickr.svg" class="main-loader">
</div>
<div class="container user-profile-container">
<div class="columns">
<div class="column is-12" *ngIf="!loading">
<div class="columns">
<div class="column is-5">
<div class="content-box">
<div class="content-box-list-item" (click)="tab = 'profile'" [class.is-active]="tab === 'profile'" name="tab-profile">
<div class="content-box-item-icon">
<i class="ionicons ion-person"></i>
</div>
<div class="content-box-container">
<h2>User Profile</h2>
<p>How your profile looks like?</p>
</div>
</div>
<div class="content-box-list-item" (click)="tab = 'tokens'" [class.is-active]="tab === 'tokens'" name="tab-tokens">
<div class="content-box-item-icon">
<i class="ionicons ion-key"></i>
</div>
<div class="content-box-container">
<h2>Access Tokens</h2>
<p>User saved access tokens.</p>
</div>
</div>
<div class="content-box-list-item" (click)="tab = 'permissions'" [class.is-active]="tab === 'permissions'" name="tab-permissions">
<div class="content-box-item-icon">
<i class="ionicons ion-ios-paper"></i>
</div>
<div class="content-box-container">
<h2>Permissions</h2>
<p>Manage permissions for user access to repositories</p>
</div>
</div>
</div>
</div>
<div class="column is-7">
<div class="content-box" *ngIf="tab === 'profile'">
<div class="user-content-profile">
<h1>User Profile</h1>
<div class="columns">
<div class="column is-3">
<figure class="image profile-image">
<img [src]="avatarUrl">
<span class="label-blue">Change avatar</span>
<label class="upload-label" *ngIf="(loggedUser.id === user.id || loggedUser.admin)">
<input type="file" ngFileSelect (uploadOutput)="onUploadOutput($event)" [uploadInput]="uploadInput">
</label>
<progress min="0" max="100" [value]="uploadProgress" class="progress-blue" *ngIf="uploading"></progress>
</figure>
</div>
<div class="column is-9">
<form class="form borderless" (ngSubmit)="updateUser($event)" #editForm="ngForm">
<div class="message red" *ngIf="!saving && userSaved === false">
<p>
<i class="ion ion-close-round"></i>
Error saving user data.
</p>
</div>
<div class="message green" *ngIf="!saving && userSaved">
<p>
<i class="ion ion-checkmark-round"></i>
User data successfully saved.
</p>
</div>
<div class="form-field">
<label class="form-label">Full Name</label>
<input class="form-input" type="text" placeholder="Full Name" name="fullname" required [(ngModel)]="user.fullname">
</div>
<div class="form-field">
<label class="form-label">Email</label>
<input class="form-input" type="text" placeholder="Email" name="email" required [(ngModel)]="user.email">
</div>
<div class="form-field" *ngIf="loggedUser.id !== user.id">
<label class="form-label is-for-toggle">Admin</label>
<app-toggle name="admin" [(ngModel)]="user.admin"></app-toggle>
</div>
<div class="form-field">
<button type="submit" name="save-user-data" class="button float-right" [class.is-loading]="saving" [disabled]="!editForm.form.valid || !(loggedUser.id === user.id || loggedUser.admin)">Save User Data</button>
</div>
</form>
<form class="form borderless" (ngSubmit)="updatePassword($event)" #passwdForm="ngForm">
<div class="message red" *ngIf="!savingPassword && passwordSaved === false">
<p>
<i class="ion ion-close-round"></i>
Error saving user password.
</p>
</div>
<div class="message green" *ngIf="!savingPassword && passwordSaved">
<p>
<i class="ion ion-checkmark-round"></i>
User password successfully updated.
</p>
</div>
<label class="form-label">Change Password</label>
<div class="form-field flex-centered">
<input class="form-input" type="password" placeholder="Password" name="password" required [(ngModel)]="password">
<button type="submit" name="change-password" class="button float-right is-marginless mleft10" [class.is-loading]="savingPassword" [disabled]="!passwdForm.form.valid || !(loggedUser.id === user.id || loggedUser.admin)">Change</button>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="content-box" *ngIf="tab === 'tokens'">
<div class="user-content-profile">
<h1>Access Tokens</h1>
<div class="message" *ngIf="!user?.access_tokens?.length">
<div class="columns">
<div class="column is-1">
<i class="ion ion-key"></i>
</div>
<div class="column is-11">
<p>No access tokens found.</p>
</div>
</div>
</div>
<div class="access-tokens-container" *ngIf="user?.access_tokens?.length">
<div class="access-token-item" *ngFor="let token of user?.access_tokens">
<div class="columns">
<div class="column is-1">
<i class="ionicon ion-key"></i>
</div>
<div class="column is-6">
<span>{{ token.description }}</span>
</div>
<div class="column is-4">
<span>{{ token.created_at | date:'medium' }}</span>
</div>
<div class="column is-1 justify-center">
<i class="ionicon ion-close pointer" name="btn-removeToken" (click)="removeToken(token.id)"></i>
</div>
</div>
</div>
</div>
<form class="form" #tokenForm="ngForm" (ngSubmit)="addToken($event)" *ngIf="(loggedUser.id === user.id || loggedUser.admin)">
<h4>New Authentication</h4>
<div class="message">
<div class="columns">
<div class="column is-1">
<i class="ion ion-alert"></i>
</div>
<div class="column is-11">
<p>Treat your access tokens with same respect as passwords.</p>
<p>Once you save access token you cannot see it again.</p>
</div>
</div>
</div>
<div class="form-field">
<label class="form-label">Authentication Type</label>
<app-selectbox [data]="tokenTypeOptions" (ngModelChange)="changeTokenTypeSelect($event)" [(ngModel)]="token.type" name="access_token_type"></app-selectbox>
</div>
<div class="form-field">
<label class="form-label">Description</label>
<input class="form-input" type="text" placeholder="Description" name="token_description" required [(ngModel)]="token.description">
</div>
<div class="form-field" *ngIf="token.type === 'gitlab'">
<label class="form-label">GitLab Username</label>
<input class="form-input" type="text" placeholder="GitLab Username" name="gitlab_username" required [(ngModel)]="token.gitlab_username">
</div>
<div class="form-field" *ngIf="token.type !== 'bitbucket'">
<label class="form-label">Token</label>
<input class="form-input" type="text" placeholder="Access Token" name="token" required [(ngModel)]="token.token">
</div>
<div class="form-field" *ngIf="token.type === 'bitbucket'">
<label class="form-label">Bitbucket Client ID</label>
<input class="form-input" type="text" placeholder="Bitbucket Client ID" name="token_bitbucket_client_id" required [(ngModel)]="token.bitbucket_client_id">
</div>
<div class="form-field" *ngIf="token.type === 'bitbucket'">
<label class="form-label">Bitbucket OAuth Key</label>
<input class="form-input" type="text" placeholder="Bitbucket OAuth Key" name="token_bitbucket_oauth_key" required [(ngModel)]="token.bitbucket_oauth_key">
</div>
<div class="form-field" *ngIf="token.type === 'bitbucket'">
<label class="form-label">Bitbucket OAuth Secret</label>
<input class="form-input" type="text" placeholder="Bitbucket OAuth Secret" name="token_bitbucket_oauth_secret" required [(ngModel)]="token.bitbucket_oauth_secret">
</div>
<div class="form-field">
<button type="submit" name="add-token" class="button green float-right" [disabled]="!tokenForm.form.valid">Add</button>
</div>
</form>
</div>
</div>
<div class="content-box" *ngIf="tab === 'permissions'">
<div class="user-content-profile">
<h1>Permissions</h1>
<div class="message green" *ngIf="user?.admin">
<div class="columns">
<div class="column is-1">
<i class="ion ion-ios-paper"></i>
</div>
<div class="column is-11">
<p>As an admin user has permissions to all repositories.</p>
</div>
</div>
</div>
<div *ngIf="!user?.admin && repositories && repositories.length" class="permission-repositories">
<div class="message">
<div class="columns">
<div class="column is-1">
<i class="ion ion-ios-paper"></i>
</div>
<div class="column is-11">
<p>List of repositories that user has access to.</p>
</div>
</div>
</div>
<div class="columns repo-item border-green" *ngFor="let repo of repositories; let i = index;">
<div class="column is-3" (click)="gotoRepository($event, repo.id)">
<span>{{ repo.full_name }}</span>
</div>
<div class="column is-6">
<span>{{ repo.html_url }}</span>
</div>
<div class="column is-2">
<span>{{ repo.default_branch }}</span>
</div>
<div class="column is-1">
<i class="ionicon ion-close pointer" (click)="updateRepositoryPermissions(user.id, repo.id, 0)" name="btn-removePermission" *ngIf="loggedUser.admin"></i>
</div>
</div>
</div>
<div *ngIf="!user?.admin && loggedUser?.admin && restrictedRepositories && restrictedRepositories.length" class="permission-repositories">
<div class="message">
<div class="columns">
<div class="column is-1">
<i class="ion ion-ios-paper"></i>
</div>
<div class="column is-11">
<p>List of repositories that user cannot see and manage.</p>
</div>
</div>
</div>
<div class="columns repo-item border-red" *ngFor="let repo of restrictedRepositories; let i = index;">
<div class="column is-3" (click)="gotoRepository($event, repo.id)">
<span>{{ repo.full_name }}</span>
</div>
<div class="column is-6">
<span>{{ repo.html_url }}</span>
</div>
<div class="column is-2">
<span>{{ repo.default_branch }}</span>
</div>
<div class="column is-1">
<i class="ionicon ion-checkmark-round pointer" (click)="updateRepositoryPermissions(user.id, repo.id, 1)" name="btn-addPermission" *ngIf="loggedUser.admin"></i>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>