Unverified Commit 15bc1ba9 authored by BaiJiangJie's avatar BaiJiangJie Committed by GitHub

Merge pull request #78 from jumpserver/dev

Dev
parents 9e58a870 2e97efbc
...@@ -160,14 +160,25 @@ export class ElementAssetTreeComponent implements OnInit, OnChanges { ...@@ -160,14 +160,25 @@ export class ElementAssetTreeComponent implements OnInit, OnChanges {
} }
onRightClick(event, treeId, treeNode) { onRightClick(event, treeId, treeNode) {
if (!treeNode || treeNode.isParent ) { if (!treeNode || treeNode.isParent ) {
return null; return null;
} }
const host = treeNode.meta.asset; const host = treeNode.meta.asset;
if (host.protocol.toLowerCase() === 'rdp') { let findSSHProtocol = false;
const protocols = host.protocols || [];
if (host.protocol) {
protocols.push(host.protocol);
}
for (let i = 0; i < protocols.length; i++) {
const protocol = protocols[i];
if (protocol && protocol.startsWith('ssh')) {
findSSHProtocol = true;
}
}
if (!findSSHProtocol) {
alert('Windows 请使用Ctrl+Shift+Alt呼出侧边栏上传下载'); alert('Windows 请使用Ctrl+Shift+Alt呼出侧边栏上传下载');
} }
if (!treeNode && event.target.tagName.toLowerCase() !== 'button' && $(event.target).parents('a').length === 0) { if (!treeNode && event.target.tagName.toLowerCase() !== 'button' && $(event.target).parents('a').length === 0) {
this.zTree.cancelSelectedNode(); this.zTree.cancelSelectedNode();
this.showRMenu(event.clientX, event.clientY); this.showRMenu(event.clientX, event.clientY);
......
<!--<iframe #rdp [src]="trust('https://inews.gtimg.com/newsapp_bt/0/3460971429/1000')" width="100%" height="100%" (mouseenter)="active()"></iframe>--> <!--<iframe #rdp [src]="trust('https://inews.gtimg.com/newsapp_bt/0/3460971429/1000')" width="100%" height="100%" (mouseenter)="active()"></iframe>-->
<iframe #rdp [src]="trust(target)" width="100%" height="100%" (mouseenter)="active()"></iframe> <iframe *ngIf="target" #rdp [src]="trust(target)" width="100%" height="100%" (mouseenter)="active()"></iframe>
...@@ -18,6 +18,7 @@ export class ElementGuacamoleComponent implements OnInit { ...@@ -18,6 +18,7 @@ export class ElementGuacamoleComponent implements OnInit {
@Input() target: string; @Input() target: string;
@Input() index: number; @Input() index: number;
@ViewChild('rdp') el: ElementRef; @ViewChild('rdp') el: ElementRef;
registered = false;
constructor(private sanitizer: DomSanitizer, constructor(private sanitizer: DomSanitizer,
private _http: HttpService, private _http: HttpService,
...@@ -26,30 +27,44 @@ export class ElementGuacamoleComponent implements OnInit { ...@@ -26,30 +27,44 @@ export class ElementGuacamoleComponent implements OnInit {
} }
registerHost() { registerHost() {
let action: any;
if (this.remoteAppId) { if (this.remoteAppId) {
this._http.guacamole_add_remote_app(User.id, this.remoteAppId).subscribe( action = this._http.guacamole_add_remote_app(User.id, this.remoteAppId);
} else {
action = this._http.guacamole_add_asset(User.id, this.host.id, this.userid);
}
action.subscribe(
data => { data => {
const base = data.result; const base = data.result;
this.target = document.location.origin + '/guacamole/#/client/' + base + '?token=' + DataStore.guacamole_token; this.target = document.location.origin + '/guacamole/#/client/' + base + '?token=' + DataStore.guacamole_token;
NavList.List[this.index].Rdp = this.el.nativeElement; NavList.List[this.index].Rdp = this.el.nativeElement;
}, },
error => { error => {
this._logger.error(error); if (!this.registered) {
console.log('Register host error, register token then connect');
this.registerToken();
}
} }
); );
} else { }
this._http.guacamole_add_asset(User.id, this.host.id, this.userid).subscribe(
registerToken() {
const now = new Date();
const nowTime = now.getTime() / 1000;
this.registered = true;
this._http.get_guacamole_token(User.id, '').subscribe(
data => { data => {
const base = data.result; // /guacamole/client will redirect to http://guacamole/#/client
this.target = document.location.origin + '/guacamole/#/client/' + base + '?token=' + DataStore.guacamole_token; DataStore.guacamole_token = data['authToken'];
NavList.List[this.index].Rdp = this.el.nativeElement; DataStore.guacamole_token_time = nowTime;
this.registerHost();
}, },
error2 => { error => {
this._logger.error(error2); this._logger.error(error);
return null;
} }
); );
} }
}
ngOnInit() { ngOnInit() {
// /guacamole/api/tokens will redirect to http://guacamole/api/tokens // /guacamole/api/tokens will redirect to http://guacamole/api/tokens
...@@ -63,26 +78,8 @@ export class ElementGuacamoleComponent implements OnInit { ...@@ -63,26 +78,8 @@ export class ElementGuacamoleComponent implements OnInit {
NavList.List[this.index].Rdp = this.el.nativeElement; NavList.List[this.index].Rdp = this.el.nativeElement;
return null; return null;
} }
const now = new Date();
const nowTime = now.getTime() / 1000;
if (!DataStore.guacamole_token || nowTime - DataStore.guacamole_token_time > 3600) {
this._http.get_guacamole_token(User.id, '').subscribe(
data => {
// /guacamole/client will redirect to http://guacamole/#/client
DataStore.guacamole_token = data['authToken'];
DataStore.guacamole_token_time = nowTime;
this.registerHost();
},
error => {
this._logger.error(error);
alert(error.message);
return null;
}
);
} else {
this.registerHost(); this.registerHost();
} }
}
trust(url) { trust(url) {
return this.sanitizer.bypassSecurityTrustResourceUrl(url); return this.sanitizer.bypassSecurityTrustResourceUrl(url);
......
...@@ -2,5 +2,5 @@ export const environment = { ...@@ -2,5 +2,5 @@ export const environment = {
production: true production: true
}; };
// export const version = '1.3.0-{{BUILD_NUMBER}} GPLv2.'; // export const version = '1.3.0-{{BUILD_NUMBER}} GPLv2.';
export const version = '1.5.0-101 GPLv2.'; export const version = '1.5.1-101 GPLv2.';
// export const version = '1.4.1-{{BUILD_NUMBER}} GPLv2.'; // export const version = '1.4.1-{{BUILD_NUMBER}} GPLv2.';
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment