Merge pull request #1945 from wknet123/master-new

Update for hiding password in target.
This commit is contained in:
Steven Zou 2017-04-07 11:28:34 +08:00 committed by GitHub
commit f7f6640a5f
4 changed files with 56 additions and 15 deletions

View File

@ -14,7 +14,7 @@
<div class="form-group">
<label for="destination_name" class="col-md-4 form-group-label-override">{{ 'DESTINATION.NAME' | translate }}<span style="color: red">*</span></label>
<label class="col-md-8" for="destination_name" aria-haspopup="true" role="tooltip" [class.invalid]="targetName.errors && (targetName.dirty || targetName.touched)" [class.valid]="targetName.valid" class="tooltip tooltip-validation tooltip-sm tooltip-bottom-left">
<input type="text" id="destination_name" [disabled]="testOngoing" [readonly]="!editable" [(ngModel)]="target.name" name="targetName" size="20" #targetName="ngModel" value="" required>
<input type="text" id="destination_name" [disabled]="testOngoing" [readonly]="!editable" [(ngModel)]="target.name" name="targetName" size="20" #targetName="ngModel" required (keyup)="clearPassword($event)">
<span class="tooltip-content" *ngIf="targetName.errors && targetName.errors.required && (targetName.dirty || targetName.touched)">
{{ 'DESTINATION.NAME_IS_REQUIRED' | translate }}
</span>
@ -23,7 +23,7 @@
<div class="form-group">
<label for="destination_url" class="col-md-4 form-group-label-override">{{ 'DESTINATION.URL' | translate }}<span style="color: red">*</span></label>
<label class="col-md-8" for="destination_url" aria-haspopup="true" role="tooltip" [class.invalid]="targetEndpoint.errors && (targetEndpoint.dirty || targetEndpoint.touched)" [class.valid]="targetEndpoint.valid" class="tooltip tooltip-validation tooltip-sm tooltip-bottom-left">
<input type="text" id="destination_url" [disabled]="testOngoing" [readonly]="!editable" [(ngModel)]="target.endpoint" size="20" name="endpointUrl" #targetEndpoint="ngModel" required>
<input type="text" id="destination_url" [disabled]="testOngoing" [readonly]="!editable" [(ngModel)]="target.endpoint" size="20" name="endpointUrl" #targetEndpoint="ngModel" required (keyup)="clearPassword($event)">
<span class="tooltip-content" *ngIf="targetEndpoint.errors && targetEndpoint.errors.required && (targetEndpoint.dirty || targetEndpoint.touched)">
{{ 'DESTINATION.URL_IS_REQUIRED' | translate }}
</span>
@ -31,11 +31,11 @@
</div>
<div class="form-group">
<label for="destination_username" class="col-md-4 form-group-label-override">{{ 'DESTINATION.USERNAME' | translate }}</label>
<input type="text" class="col-md-8" id="destination_username" [disabled]="testOngoing" [readonly]="!editable" [(ngModel)]="target.username" size="20" name="username" #username="ngModel">
<input type="text" class="col-md-8" id="destination_username" [disabled]="testOngoing" [readonly]="!editable" [(ngModel)]="target.username" size="20" name="username" #username="ngModel" (keyup)="clearPassword($event)">
</div>
<div class="form-group">
<label for="destination_password" class="col-md-4 form-group-label-override">{{ 'DESTINATION.PASSWORD' | translate }}</label>
<input type="password" class="col-md-8" id="destination_password" [disabled]="testOngoing" [readonly]="!editable" [(ngModel)]="target.password" size="20" name="password" #password="ngModel">
<input type="password" class="col-md-8" id="destination_password" [disabled]="testOngoing" [readonly]="!editable" [(ngModel)]="target.password" size="20" name="password" #password="ngModel" (focus)="clearPassword($event)">
</div>
<div class="form-group">
<label for="spin" class="col-md-4"></label>

View File

@ -11,6 +11,8 @@ import { Target } from '../target';
import { TranslateService } from '@ngx-translate/core';
const FAKE_PASSWORD = 'rjGcfuRu';
@Component({
selector: 'create-edit-destination',
templateUrl: './create-edit-destination.component.html',
@ -42,6 +44,8 @@ export class CreateEditDestinationComponent implements AfterViewChecked {
hasChanged: boolean;
endpointUrlHasChanged: boolean;
@ViewChild(InlineAlertComponent)
inlineAlert: InlineAlertComponent;
@ -59,7 +63,8 @@ export class CreateEditDestinationComponent implements AfterViewChecked {
this.editable = editable;
this.hasChanged = false;
this.endpointUrlHasChanged = false;
this.pingTestMessage = '';
this.pingStatus = true;
this.testOngoing = false;
@ -75,7 +80,8 @@ export class CreateEditDestinationComponent implements AfterViewChecked {
this.initVal.name = this.target.name;
this.initVal.endpoint = this.target.endpoint;
this.initVal.username = this.target.username;
this.initVal.password = this.target.password;
this.initVal.password = FAKE_PASSWORD;
this.target.password = this.initVal.password;
},
error=>this.messageHandlerService.handleError(error)
);
@ -89,8 +95,23 @@ export class CreateEditDestinationComponent implements AfterViewChecked {
this.translateService.get('DESTINATION.TESTING_CONNECTION').subscribe(res=>this.pingTestMessage=res);
this.pingStatus = true;
this.testOngoing = !this.testOngoing;
let postedTarget: any = {};
if(!this.endpointUrlHasChanged) {
postedTarget = {
id: this.target.id
};
} else {
postedTarget = {
endpoint: this.target.endpoint,
username: this.target.username,
password: this.target.password
};
}
this.replicationService
.pingTarget(this.target)
.pingTarget(postedTarget)
.subscribe(
response=>{
this.pingStatus = true;
@ -105,6 +126,13 @@ export class CreateEditDestinationComponent implements AfterViewChecked {
)
}
clearPassword($event: any) {
if(this.editable) {
this.target.password = '';
this.endpointUrlHasChanged = true;
}
}
onSubmit() {
switch(this.actionType) {
case ActionType.ADD_NEW:
@ -144,6 +172,10 @@ export class CreateEditDestinationComponent implements AfterViewChecked {
);
break;
case ActionType.EDIT:
if(!this.endpointUrlHasChanged) {
this.createEditDestinationOpened = false;
return;
}
this.replicationService
.updateTarget(this.target)
.subscribe(
@ -209,7 +241,7 @@ export class CreateEditDestinationComponent implements AfterViewChecked {
for(let i in data) {
let current = data[i];
let origin = this.initVal[this.mappedName[i]];
if((this.actionType === ActionType.EDIT && this.editable && !current) || (current && current !== origin)) {
if(((this.actionType === ActionType.EDIT && this.editable && !current) || current) && current !== origin) {
this.hasChanged = true;
break;
} else {

View File

@ -140,6 +140,9 @@ export class ReplicationService {
pingTarget(target: Target): Observable<any> {
let body = new URLSearchParams();
if(target.id) {
body.set('id', target.id + '');
}
body.set('endpoint', target.endpoint);
body.set('username', target.username);
body.set('password', target.password);

View File

@ -15,6 +15,8 @@ import { Target } from '../../replication/target';
import { TranslateService } from '@ngx-translate/core';
const FAKE_PASSWORD: string = 'ywJZnDTM';
@Component({
selector: 'create-edit-policy',
templateUrl: 'create-edit-policy.component.html',
@ -85,7 +87,7 @@ export class CreateEditPolicyComponent implements OnInit, AfterViewChecked {
this.createEditPolicy.targetName = initialTarget.name;
this.createEditPolicy.endpointUrl = initialTarget.endpoint;
this.createEditPolicy.username = initialTarget.username;
this.createEditPolicy.password = initialTarget.password;
this.createEditPolicy.password = FAKE_PASSWORD;
this.initVal.targetId = this.createEditPolicy.targetId;
this.initVal.endpointUrl = this.createEditPolicy.endpointUrl;
@ -160,7 +162,7 @@ export class CreateEditPolicyComponent implements OnInit, AfterViewChecked {
this.createEditPolicy.targetId = result.id;
this.createEditPolicy.endpointUrl = result.endpoint;
this.createEditPolicy.username = result.username;
this.createEditPolicy.password = result.password;
this.createEditPolicy.password = FAKE_PASSWORD;
}
}
@ -293,7 +295,7 @@ export class CreateEditPolicyComponent implements OnInit, AfterViewChecked {
for(let i in data) {
let origin = this.initVal[i];
let current = data[i];
if((this.actionType === ActionType.EDIT && !this.readonly && !current) || (current && current !== origin)) {
if(((this.actionType === ActionType.EDIT && !this.readonly && !current ) || current) && current !== origin) {
this.hasChanged = true;
break;
} else {
@ -309,10 +311,14 @@ export class CreateEditPolicyComponent implements OnInit, AfterViewChecked {
this.pingStatus = true;
this.translateService.get('REPLICATION.TESTING_CONNECTION').subscribe(res=>this.pingTestMessage=res);
this.testOngoing = !this.testOngoing;
let pingTarget = new Target();
pingTarget.endpoint = this.createEditPolicy.endpointUrl;
pingTarget.username = this.createEditPolicy.username;
pingTarget.password = this.createEditPolicy.password;
let pingTarget: Target | any = {};
if(this.isCreateDestination) {
pingTarget.endpoint = this.createEditPolicy.endpointUrl;
pingTarget.username = this.createEditPolicy.username;
pingTarget.password = this.createEditPolicy.password;
} else {
pingTarget.id = this.createEditPolicy.targetId;
}
this.replicationService
.pingTarget(pingTarget)
.subscribe(