Commit d5acdb9b authored by zheng liu's avatar zheng liu

Merged in master (pull request #89)

Master
parents cc52e24f 6e71d866
......@@ -70,10 +70,19 @@ export class HttpService {
return this.http.get<Array<HostGroup>>('/api/perms/v1/user/nodes-assets/');
}
get_guacamole_token(user_id: string) {
get_guacamole_token(user_id: string, authToken: string) {
const body = new HttpParams()
.set('username', user_id)
.set('password', 'jumpserver');
.set('password', 'jumpserver')
.set('asset_token', authToken);
// {
// "authToken": "xxxxxxx",
// "username": "xxxxxx",
// "dataSource": "jumpserver",
// "availableDataSources":[
// "jumpserver"
// ]
// }
return this.http.post('/guacamole/api/tokens',
body.toString(),
{headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')});
......@@ -94,12 +103,12 @@ export class HttpService {
);
}
guacamole_token_add_asset(token: string) {
guacamole_token_add_asset(assetToken: string, token: string) {
const params = new HttpParams()
.set('asset_token', token)
.set('token', DataStore.guacamole_token);
.set('asset_token', assetToken)
.set('token', token);
return this.http.get(
'/guacamole/api/session/ext/jumpserver/asset/token/add',
'/guacamole/api/ext/jumpserver/asset/token/add',
{
headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded'),
params: params
......@@ -117,6 +126,14 @@ export class HttpService {
return this.http.get('/api/terminal/v1/sessions/' + token + '/replay');
}
get_user_id_from_token(token: string) {
const params = new HttpParams()
.set('user-only', '1')
.set('token', token);
return this.http.get('/api/users/v1/connection-token/', {params: params});
}
}
@Injectable()
......@@ -256,50 +273,53 @@ export class AppService implements OnInit {
this._router.navigate([document.location.pathname]);
}
// jQuery('angular2').show();
} else if (document.location.pathname === '/luna/connect') {
User.logined = true;
} else {
// this.browser();
this._http.get_user_profile()
.subscribe(
data => {
User.id = data['id'];
User.name = data['name'];
User.username = data['username'];
User.email = data['email'];
User.is_active = data['is_active'];
User.is_superuser = data['is_superuser'];
User.role = data['role'];
// User.groups = data['groups'];
User.wechat = data['wechat'];
User.comment = data['comment'];
User.date_expired = data['date_expired'];
if (data['phone']) {
User.phone = data['phone'].toString();
}
User.logined = data['logined'];
this._logger.debug(User);
},
err => {
// this._logger.error(err);
User.logined = false;
window.location.href = document.location.origin + '/users/login?next=' + document.location.pathname;
// this._router.navigate(['login']);
},
// () => {
// if (User.logined) {
// if (document.location.pathname === '/login') {
// this._router.navigate(['']);
// } else {
// this._router.navigate([document.location.pathname]);
// }
// } else {
// this._router.navigate(['login']);
// }
// jQuery('angular2').show();
// }
.subscribe(
data => {
User.id = data['id'];
User.name = data['name'];
User.username = data['username'];
User.email = data['email'];
User.is_active = data['is_active'];
User.is_superuser = data['is_superuser'];
User.role = data['role'];
// User.groups = data['groups'];
User.wechat = data['wechat'];
User.comment = data['comment'];
User.date_expired = data['date_expired'];
if (data['phone']) {
User.phone = data['phone'].toString();
}
User.logined = data['logined'];
this._logger.debug(User);
this._localStorage.set('user', data['id']);
},
err => {
// this._logger.error(err);
User.logined = false;
window.location.href = document.location.origin + '/users/login?next=' +
document.location.pathname + document.location.search;
// this._router.navigate(['login']);
},
// () => {
// if (User.logined) {
// if (document.location.pathname === '/login') {
// this._router.navigate(['']);
// } else {
// this._router.navigate([document.location.pathname]);
// }
// } else {
// this._router.navigate(['login']);
// }
// jQuery('angular2').show();
// }
);
}
}
} else {
}
} else {
this._router.navigate(['FOF']);
// jQuery('angular2').show();
}
......
......@@ -4,7 +4,7 @@
*ngIf="system =='linux'">
</app-element-term>
<app-element-guacamole
[token]="token"
[target]="target"
[index]="0"
*ngIf="system=='windows'">
*ngIf="system=='windows' && target">
</app-element-guacamole>
import {Component, OnInit} from '@angular/core';
import {AppService} from '../app.service';
import {AppService, HttpService, LocalStorageService} from '../app.service';
import {DataStore} from '../globals';
import * as jQuery from 'jquery/dist/jquery.min.js';
......@@ -11,8 +11,14 @@ import * as jQuery from 'jquery/dist/jquery.min.js';
export class ConnectPageComponent implements OnInit {
token: string;
system: string;
authToken: string;
userid: string;
target: string;
base: string;
constructor(private _appService: AppService) {
constructor(private _appService: AppService,
private _http: HttpService,
private _localStorage: LocalStorageService) {
DataStore.NavShow = false;
}
......@@ -22,6 +28,65 @@ export class ConnectPageComponent implements OnInit {
jQuery('body').css('background-color', 'black');
this.userid = this._localStorage.get('user-' + this.token);
this.authToken = this._localStorage.get('authToken-' + this.token);
this.base = this._localStorage.get('base-' + this.token);
if (this.system === 'windows') {
if (!this.userid) {
this._http.get_user_id_from_token(this.token)
.subscribe(
data => {
this._localStorage.set('user-' + this.token, data['user']);
this.userid = data['user'];
this.getAuthToken();
}
);
} else {
this.getAuthToken();
}
}
}
getAuthToken() {
if (!this.authToken) {
this._http.get_guacamole_token(this.userid, this.token).subscribe(
data => {
if (data['authToken']) {
this._localStorage.set('authToken-' + this.token, data['authToken']);
this.authToken = data['authToken'];
this.getBase();
}
}
);
} else {
this.getBase();
}
}
getBase() {
if (!this.base) {
this._http.guacamole_token_add_asset(this.token, this.authToken).subscribe(
data => {
if (data['result']) {
this._localStorage.set('base-' + this.token, data['result']);
this.base = data['result'];
this.setWinTarget();
}
});
} else {
this.setWinTarget();
}
}
setWinTarget() {
if (this.base && this.authToken) {
this.target = document.location.origin + '/guacamole/#/client/' + this.base +
'?asset_token=jumpserver&token=' + this.authToken;
} else {
window.location.reload();
}
}
}
......@@ -14,11 +14,11 @@ import {NavList} from '../../ControlPage/control/control.component';
export class ElementGuacamoleComponent implements OnInit {
@Input() host: any;
@Input() userid: any;
@Input() token: string;
@Input() target: string;
@Input() index: number;
target: string;
@ViewChild('rdp') el: ElementRef;
constructor(private sanitizer: DomSanitizer,
private _http: HttpService,
private _cookie: CookieService,
......@@ -27,20 +27,7 @@ export class ElementGuacamoleComponent implements OnInit {
ngOnInit() {
// /guacamole/api/tokens will redirect to http://guacamole/api/tokens
if (this.token) {
this._http.get_guacamole_token(User.id).subscribe(
data => {
DataStore.guacamole_token = data['authToken'];
this._http.guacamole_token_add_asset(this.token).subscribe(
_ => {
this.target = document.location.origin + '/guacamole/#/client/' + data['result'] + '?token=' + DataStore.guacamole_token;
},
error2 => {
this._logger.error(error2);
}
);
});
} else {
if (!this.target) {
const base = window.btoa(this.host.id + '\0' + 'c' + '\0' + 'jumpserver');
if (environment.production) {
if (DataStore.guacamole_token) {
......@@ -53,7 +40,7 @@ export class ElementGuacamoleComponent implements OnInit {
}
);
} else {
this._http.get_guacamole_token(User.id).subscribe(
this._http.get_guacamole_token(User.id, '').subscribe(
data => {
// /guacamole/client will redirect to http://guacamole/#/client
DataStore.guacamole_token = data['authToken'];
......@@ -66,7 +53,6 @@ export class ElementGuacamoleComponent implements OnInit {
this._logger.error(error2);
}
);
// '/guacamole/#/client/' + base + '?token=' + data['authToken'];
},
error2 => {
this._logger.error(error2);
......
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