Unverified Commit b04b3c56 authored by liuzheng712's avatar liuzheng712

feat: lot fix

parents 3bfdf55a 959d9fab
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
"styles": [ "styles": [
"../node_modules/layui-layer/dist/theme/default/layer.css", "../node_modules/layui-layer/dist/theme/default/layer.css",
"../node_modules/animate.css/animate.min.css", "../node_modules/animate.css/animate.min.css",
"assets/inspinia/style.scss",
"../node_modules/xterm/dist/xterm.css", "../node_modules/xterm/dist/xterm.css",
"sass/style.scss", "sass/style.scss",
"styles.css" "styles.css"
......
...@@ -177,6 +177,27 @@ def asset_groups_assets(): ...@@ -177,6 +177,27 @@ def asset_groups_assets():
return jsonify(assets) return jsonify(assets)
@app.route('/api/users/v1/profile/')
def user_profile():
assets = {
"id": "4fc67feb-9efa-4e7b-94b0-b73356a87b2e",
"username": "admin",
"name": "Administrator",
"email": "admin@mycomany.com",
"is_active": True,
"is_superuser": True,
"role": "Administrator",
"groups": [
"Default"
],
"wechat": "",
"phone": 13888888888,
"comment": "",
"date_expired": "2087-12-16 07:41:35"
}
return jsonify(assets)
@app.route('/api/terminal/v1/sessions/test/replay/') @app.route('/api/terminal/v1/sessions/test/replay/')
def replay(): def replay():
return redirect("http://jps.ilz.me/media/2017-12-24/ec87a486-0344-4f12-b27a-620321944f7f.gz") return redirect("http://jps.ilz.me/media/2017-12-24/ec87a486-0344-4f12-b27a-620321944f7f.gz")
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -5,36 +5,36 @@ ...@@ -5,36 +5,36 @@
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve --proxy-config proxy.conf.json", "start": "ng serve --proxy-config proxy.conf.json",
"build": "ng build -prod --base-href=/luna/ --deploy '/luna/'", "build": "ng build --environment prod --build-optimizer=false --base-href=/luna/ --deploy '/luna/'",
"test": "ng test", "test": "ng test",
"lint": "ng lint", "lint": "ng lint",
"e2e": "ng e2e" "e2e": "ng e2e"
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "^4.2.4", "@angular/animations": "5.2.0",
"@angular/cdk": "^2.0.0-beta.12", "@angular/cdk": "^5.1.0",
"@angular/common": "^4.2.4", "@angular/common": "5.2.0",
"@angular/compiler": "^4.2.4", "@angular/compiler": "5.2.0",
"@angular/core": "^4.2.4", "@angular/core": "5.2.0",
"@angular/forms": "^4.2.4", "@angular/forms": "5.2.0",
"@angular/http": "^4.2.4", "@angular/http": "5.2.0",
"@angular/platform-browser": "^4.2.4", "@angular/platform-browser": "5.2.0",
"@angular/platform-browser-dynamic": "^4.2.4", "@angular/platform-browser-dynamic": "5.2.0",
"@angular/router": "^4.2.4", "@angular/router": "5.2.0",
"angular2-logger": "^0.6.0",
"animate.css": "^3.5.2", "animate.css": "^3.5.2",
"body-parser": "^1.18.2", "body-parser": "^1.18.2",
"bootstrap": "^4.0.0-beta.3", "bootstrap": "^4.0.0-beta.3",
"clipboard": "^1.7.1", "clipboard": "^1.7.1",
"compass-mixins": "^0.12.10", "compass-mixins": "^0.12.10",
"core-js": "^2.4.1", "core-js": "2.5.3",
"directory-encoder": "^0.9.2", "directory-encoder": "^0.9.2",
"filetree-css": "^1.0.0", "filetree-css": "^1.0.0",
"font-awesome": "^4.7.0", "font-awesome": "4.7.0",
"handlebars": "^4.0.11", "handlebars": "^4.0.11",
"inconsolata": "0.0.2", "inconsolata": "0.0.2",
"jquery": "^3.1.0", "intl": "1.2.5",
"jquery": "3.2.1",
"jquery-slimscroll": "^1.3.8", "jquery-slimscroll": "^1.3.8",
"jquery-sparkline": "^2.4.0", "jquery-sparkline": "^2.4.0",
"jvectormap": "1.2.2", "jvectormap": "1.2.2",
...@@ -45,44 +45,49 @@ ...@@ -45,44 +45,49 @@
"ng2-charts": "^1.5.0", "ng2-charts": "^1.5.0",
"ng2-cookies": "^1.0.12", "ng2-cookies": "^1.0.12",
"ngx-bootstrap": "^1.6.6", "ngx-bootstrap": "^1.6.6",
"ngx-contextmenu": "^4.1.1", "ngx-layer": "0.0.4",
"ngx-logger": "^1.1.2",
"ngx-perfect-scrollbar": "5.2.0",
"ngx-progressbar": "^2.1.1",
"node": "^9.3.0", "node": "^9.3.0",
"npm": "^5.6.0", "npm": "^5.6.0",
"npm-font-open-sans": "^1.1.0", "npm-font-open-sans": "^1.1.0",
"peity": "^3.2.1", "peity": "^3.2.1",
"popper.js": "^1.12.9", "popper.js": "1.12.9",
"roboto-fontface": "^0.8.0", "roboto-fontface": "^0.8.0",
"rxjs": "^5.4.2", "rxjs": "5.5.6",
"sass-math": "^1.0.0", "sass-math": "^1.0.0",
"socket.io": "^2.0.3", "socket.io": "^2.0.3",
"socket.io-client": "^2.0.4", "socket.io-client": "^2.0.4",
"ssh-keygen": "^0.4.1", "ssh-keygen": "^0.4.1",
"term.js": "0.0.7",
"tether": "^1.4.0", "tether": "^1.4.0",
"uuid-js": "^0.7.5", "uuid-js": "^0.7.5",
"xterm": "^2.9.2", "xterm": "^2.9.2",
"zone.js": "^0.8.14" "tslib": "1.8.1",
"zone.js": "0.8.20"
}, },
"devDependencies": { "devDependencies": {
"@angular/cli": "1.5.2", "@angular-devkit/core": "0.0.28",
"@angular/compiler-cli": "^4.2.4", "@angular-devkit/schematics": "0.0.42",
"@angular/language-service": "^4.2.4", "@angular/cli": "^1.6.5",
"@types/jasmine": "~2.5.53",
"@types/jasminewd2": "~2.0.2", "@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"codelyzer": "^4.0.1",
"jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0",
"karma": "~1.7.0",
"karma-chrome-launcher": "~2.1.1",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"node-sass": "^4.7.2", "node-sass": "^4.7.2",
"protractor": "~5.1.2", "@angular/compiler-cli": "5.2.0",
"ts-node": "~3.2.0", "@angular/language-service": "5.2.0",
"tslint": "~5.3.2", "@types/jasmine": "2.8.4",
"typescript": "~2.3.3" "@types/node": "9.3.0",
"codelyzer": "4.0.2",
"jasmine-core": "2.8.0",
"jasmine-spec-reporter": "4.2.1",
"karma": "2.0.0",
"karma-chrome-launcher": "2.2.0",
"karma-cli": "1.0.1",
"karma-coverage-istanbul-reporter": "1.3.3",
"karma-jasmine": "1.1.1",
"karma-jasmine-html-reporter": "0.2.2",
"protractor": "5.2.2",
"ts-node": "3.3.0",
"tslint": "5.9.1",
"typescript": "2.4.2"
} }
} }
{ {
"/api": { "/api": {
"target": "http://localhost:5000", "target": "http://127.0.0.1:5000",
"secure": false "secure": false
}, },
"/socket.io/": { "/socket.io/": {
......
...@@ -6,19 +6,16 @@ ...@@ -6,19 +6,16 @@
* @author liuzheng <liuzheng712@gmail.com> * @author liuzheng <liuzheng712@gmail.com>
*/ */
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {Logger} from 'angular2-logger/core'; import {AppService, HttpService, LogService} from '../../app.service';
import {AppService, HttpService} from '../../app.service';
import {NgForm} from '@angular/forms'; import {NgForm} from '@angular/forms';
import {Router} from '@angular/router'; import {Router} from '@angular/router';
import {DataStore, User} from '../../globals'; import {DataStore, User} from '../../globals';
import * as jQuery from 'jquery/dist/jquery.min.js'; import * as jQuery from 'jquery/dist/jquery.min.js';
@Component({ @Component({
selector: 'app-login', selector: 'app-login',
templateUrl: './login.component.html', templateUrl: './login.component.html',
styleUrls: ['./login.component.css'], styleUrls: ['./login.component.css'],
providers: [AppService]
}) })
export class LoginComponent implements OnInit { export class LoginComponent implements OnInit {
DataStore = DataStore; DataStore = DataStore;
...@@ -28,7 +25,7 @@ export class LoginComponent implements OnInit { ...@@ -28,7 +25,7 @@ export class LoginComponent implements OnInit {
constructor(private _appService: AppService, constructor(private _appService: AppService,
private _http: HttpService, private _http: HttpService,
private _router: Router, private _router: Router,
private _logger: Logger) { private _logger: LogService) {
this._logger.log('login.ts:LoginComponent'); this._logger.log('login.ts:LoginComponent');
DataStore.NavShow = false; DataStore.NavShow = false;
} }
...@@ -47,13 +44,13 @@ export class LoginComponent implements OnInit { ...@@ -47,13 +44,13 @@ export class LoginComponent implements OnInit {
DataStore.error['login'] = ''; DataStore.error['login'] = '';
this._logger.log(User); this._logger.log(User);
if (User.username.length > 0 && User.password.length > 6 && User.password.length < 100) { if (User.username.length > 0 && User.password.length > 6 && User.password.length < 100) {
this._http.post('/api/checklogin', JSON.stringify(User)).map(res => res.json()) this._http.check_login(JSON.stringify(User))
.subscribe( .subscribe(
data => { data => {
User.logined = data.logined; User.logined = data['logined'];
User.name = data.name; User.name = data['name'];
User.username = data.username; User.username = data['username'];
User.logined = data.logined; User.logined = data['logined'];
}, },
err => { err => {
this._logger.error(err); this._logger.error(err);
......
...@@ -8,19 +8,17 @@ ...@@ -8,19 +8,17 @@
*/ */
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {Logger} from 'angular2-logger/core'; import {AppService, HttpService, LogService} from '../../app.service';
import {AppService, HttpService} from '../../app.service';
import {SearchComponent} from '../search/search.component'; import {SearchComponent} from '../search/search.component';
import {DataStore} from '../../globals'; import {DataStore} from '../../globals';
import {version} from '../../../environments/environment'; import {version} from '../../../environments/environment';
import * as jQuery from 'jquery/dist/jquery.min.js'; import * as jQuery from 'jquery/dist/jquery.min.js';
import * as layer from 'layui-layer/src/layer.js';
import * as UUID from 'uuid-js/lib/uuid.js';
import {ElementServerMenuComponent} from '../../elements/server-menu/server-menu.component'; import {ElementServerMenuComponent} from '../../elements/server-menu/server-menu.component';
import {NavList, View} from '../control/control.component'; import {NavList, View} from '../control/control.component';
import {LayerService} from '../../elements/layer/layer.service';
export class HostGroup { export interface HostGroup {
name: string; name: string;
id: string; id: string;
children: Array<Host>; children: Array<Host>;
...@@ -83,22 +81,21 @@ export class CleftbarComponent implements OnInit { ...@@ -83,22 +81,21 @@ export class CleftbarComponent implements OnInit {
constructor(private _appService: AppService, constructor(private _appService: AppService,
private _http: HttpService, private _http: HttpService,
private _search: SearchComponent, private _search: SearchComponent,
private _logger: Logger, private _logger: LogService,
private _menu: ElementServerMenuComponent) { private _menu: ElementServerMenuComponent,
private _layer: LayerService) {
this._logger.log('nav.ts:NavComponent'); this._logger.log('nav.ts:NavComponent');
// this._appService.getnav() // this._appService.getnav()
} }
ngOnInit() { ngOnInit() {
this._http.get('/api/perms/v1/user/my/asset-groups-assets/') this._http.get_my_asset_groups_assets()
.map(res => res.json())
.subscribe(response => { .subscribe(response => {
this.HostGroups = response; this.HostGroups = response;
this.autologin(); this.autologin();
}); });
} }
autologin() { autologin() {
const id = this._appService.getQueryString('id'); const id = this._appService.getQueryString('id');
if (id) { if (id) {
...@@ -129,7 +126,7 @@ export class CleftbarComponent implements OnInit { ...@@ -129,7 +126,7 @@ export class CleftbarComponent implements OnInit {
for (const u of host.system_users_granted) { for (const u of host.system_users_granted) {
options += '<option value="' + u.id + '">' + u.username + '</option>'; options += '<option value="' + u.id + '">' + u.username + '</option>';
} }
layer.open({ this._layer.open({
title: 'Please Choose a User', title: 'Please Choose a User',
scrollbar: false, scrollbar: false,
moveOut: true, moveOut: true,
...@@ -145,7 +142,7 @@ export class CleftbarComponent implements OnInit { ...@@ -145,7 +142,7 @@ export class CleftbarComponent implements OnInit {
} }
} }
that.login(host, user); that.login(host, user);
layer.close(index); that._layer.close(index);
}, },
btn2: function (index, layero) { btn2: function (index, layero) {
}, },
...@@ -178,21 +175,6 @@ export class CleftbarComponent implements OnInit { ...@@ -178,21 +175,6 @@ export class CleftbarComponent implements OnInit {
NavList.List.push(new View()); NavList.List.push(new View());
NavList.Active = id; NavList.Active = id;
} }
// if (host.platform) {
// if (host.platform.toLowerCase() === 'linux') {
// jQuery('app-ssh').show();
// jQuery('app-rdp').hide();
// this._term.TerminalConnect(host, user.id);
// } else if (host.platform.toLowerCase() === 'windows') {
// jQuery('app-ssh').hide();
// jQuery('app-rdp').show();
// this._rdp.Connect(host, user.id);
// } else {
// jQuery('app-ssh').show();
// jQuery('app-rdp').hide();
// this._term.TerminalConnect(host, user.id);
// }
// }
} }
checkPriority(sysUsers) { checkPriority(sysUsers) {
......
div, app-element-term, app-element-guacamole { div, app-element-term, app-element-iframe {
height: 100%; height: 100%;
padding-bottom: 30px;
} }
div { div {
......
...@@ -11,6 +11,5 @@ ...@@ -11,6 +11,5 @@
[userid]="m.user.id" [userid]="m.user.id"
[index]="i" [index]="i"
*ngIf="m.type=='rdp'"> *ngIf="m.type=='rdp'">
</app-element-iframe> </app-element-iframe>
</div> </div>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
.tabs ul li.active { .tabs ul li.active {
box-sizing: border-box; box-sizing: border-box;
border-bottom: 3px solid #19aa8d !important; border-bottom: 5px solid #19aa8d !important;
} }
.tabs ul li span { .tabs ul li span {
...@@ -87,13 +87,22 @@ ...@@ -87,13 +87,22 @@
*/ */
.tabs::-webkit-scrollbar-track { .tabs::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
background-color: #F5F5F5; background-color: #676a6c;
} }
.tabs::-webkit-scrollbar { .tabs::-webkit-scrollbar {
height: 1px; height: 2px;
} }
.tabs::-webkit-scrollbar-thumb { .tabs::-webkit-scrollbar-thumb {
background-color: #19aa8d; background-color: #F5F5F5;
}
.scroll-botton {
font-size: 20px;
float: left;
height: 30px;
overflow: hidden;
background-color: #3a3333;
color: white
} }
<div class="scroll-botton">
&nbsp; <a class="left" (click)="scrollleft()"><i class="fa fa-caret-left"></i></a>
&nbsp;
<a class="right" (click)="scrollright()"><i class="fa fa-caret-right"></i></a>
&nbsp;
</div>
<div class="tabs"> <div class="tabs">
<ul [ngStyle]="{'width':150*NavList.List.length+'px'}"> <ul [ngStyle]="{'width':150*NavList.List.length+'px'}">
<li *ngFor="let m of NavList.List;let i = index" <li *ngFor="let m of NavList.List;let i = index"
......
...@@ -11,7 +11,6 @@ import {Component, OnInit} from '@angular/core'; ...@@ -11,7 +11,6 @@ import {Component, OnInit} from '@angular/core';
import {ControlComponent, NavList} from '../control.component'; import {ControlComponent, NavList} from '../control.component';
import * as jQuery from 'jquery/dist/jquery.min.js'; import * as jQuery from 'jquery/dist/jquery.min.js';
@Component({ @Component({
selector: 'app-controlnav', selector: 'app-controlnav',
templateUrl: './controlnav.component.html', templateUrl: './controlnav.component.html',
...@@ -64,5 +63,12 @@ export class ControlnavComponent implements OnInit { ...@@ -64,5 +63,12 @@ export class ControlnavComponent implements OnInit {
ControlnavComponent.checkActive(index); ControlnavComponent.checkActive(index);
} }
scrollleft() {
jQuery('.tabs').scrollLeft(jQuery('.tabs').scrollLeft() - 100);
}
scrollright() {
jQuery('.tabs').scrollLeft(jQuery('.tabs').scrollLeft() + 100);
}
} }
...@@ -13,8 +13,6 @@ import {DataStore, User} from '../globals'; ...@@ -13,8 +13,6 @@ import {DataStore, User} from '../globals';
selector: 'app-controllpage', selector: 'app-controllpage',
templateUrl: './controlpage.component.html', templateUrl: './controlpage.component.html',
styleUrls: ['./controlpage.component.css'], styleUrls: ['./controlpage.component.css'],
providers: [AppService]
}) })
export class ControlPageComponent implements OnInit { export class ControlPageComponent implements OnInit {
DataStore = DataStore; DataStore = DataStore;
......
...@@ -7,9 +7,7 @@ ...@@ -7,9 +7,7 @@
*/ */
import {Component, OnChanges, Input, Pipe, PipeTransform} from '@angular/core'; import {Component, OnChanges, Input, Pipe, PipeTransform} from '@angular/core';
import {Logger} from 'angular2-logger/core'; import {AppService, HttpService, LogService} from '../../app.service';
import {AppService, HttpService} from '../../app.service';
export let Q = ''; export let Q = '';
...@@ -25,7 +23,7 @@ export class SearchComponent implements OnChanges { ...@@ -25,7 +23,7 @@ export class SearchComponent implements OnChanges {
constructor(private _appService: AppService, constructor(private _appService: AppService,
private _http: HttpService, private _http: HttpService,
private _logger: Logger) { private _logger: LogService) {
this._logger.log('LeftbarComponent.ts:SearchBar'); this._logger.log('LeftbarComponent.ts:SearchBar');
} }
...@@ -41,8 +39,7 @@ export class SearchComponent implements OnChanges { ...@@ -41,8 +39,7 @@ export class SearchComponent implements OnChanges {
if (this.searchrequest) { if (this.searchrequest) {
this.searchrequest.unsubscribe(); this.searchrequest.unsubscribe();
} }
this.searchrequest = this._http.get('/api/search?q=' + q) this.searchrequest = this._http.search(q)
.map(res => res.json())
.subscribe( .subscribe(
data => { data => {
this._logger.log(data); this._logger.log(data);
......
...@@ -6,9 +6,7 @@ ...@@ -6,9 +6,7 @@
* @author liuzheng <liuzheng712@gmail.com> * @author liuzheng <liuzheng712@gmail.com>
*/ */
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {Logger} from 'angular2-logger/core'; import {AppService, LogService} from '../../app.service';
import {AppService} from '../../app.service';
@Component({ @Component({
selector: 'app-ileftbar', selector: 'app-ileftbar',
...@@ -18,7 +16,7 @@ import {AppService} from '../../app.service'; ...@@ -18,7 +16,7 @@ import {AppService} from '../../app.service';
export class IleftbarComponent implements OnInit { export class IleftbarComponent implements OnInit {
constructor(private _appService: AppService, constructor(private _appService: AppService,
private _logger: Logger) { private _logger: LogService) {
this._logger.log('nav.ts:NavComponent'); this._logger.log('nav.ts:NavComponent');
// this._appService.getnav() // this._appService.getnav()
} }
......
...@@ -13,7 +13,6 @@ import {User} from '../globals'; ...@@ -13,7 +13,6 @@ import {User} from '../globals';
selector: 'app-index-page', selector: 'app-index-page',
templateUrl: './index-page.component.html', templateUrl: './index-page.component.html',
styleUrls: ['./index-page.component.css'], styleUrls: ['./index-page.component.css'],
providers: [AppService]
}) })
export class IndexPageComponent implements OnInit { export class IndexPageComponent implements OnInit {
User = User; User = User;
......
...@@ -17,14 +17,16 @@ import {MonitorPageComponent} from './monitor-page/monitor-page.component'; ...@@ -17,14 +17,16 @@ import {MonitorPageComponent} from './monitor-page/monitor-page.component';
import {RdpPageComponent} from './rdp-page/rdp-page.component'; import {RdpPageComponent} from './rdp-page/rdp-page.component';
import {TermPageComponent} from './term-page/term-page.component'; import {TermPageComponent} from './term-page/term-page.component';
import {ElementServerMenuComponent} from './elements/server-menu/server-menu.component'; import {ElementServerMenuComponent} from './elements/server-menu/server-menu.component';
import {BlankPageComponent} from './blank-page/blank-page.component';
const appRoutes: Routes = [ const appRoutes: Routes = [
{path: 'users/login', component: LoginComponent}, // {path: 'users/login', component: LoginComponent},
{path: 'rdp/:token', component: RdpPageComponent}, {path: 'rdp/:token', component: RdpPageComponent},
{path: 'term/:token', component: TermPageComponent}, {path: 'term/:token', component: TermPageComponent},
{path: 'replay/:token', component: ReplayPageComponent}, {path: 'replay/:token', component: ReplayPageComponent},
{path: 'monitor/:token', component: MonitorPageComponent}, {path: 'monitor/:token', component: MonitorPageComponent},
{path: 'test', component: ElementServerMenuComponent}, {path: 'test', component: TermPageComponent},
{path: 'undefined', component: BlankPageComponent},
{path: '', component: ControlPageComponent}, {path: '', component: ControlPageComponent},
{path: '**', component: NotFoundComponent} {path: '**', component: NotFoundComponent}
]; ];
......
<ng-progress></ng-progress>
<app-element-nav *ngIf="DataStore.NavShow"></app-element-nav> <app-element-nav *ngIf="DataStore.NavShow"></app-element-nav>
<router-outlet></router-outlet> <router-outlet></router-outlet>
<!--<app-element-interactive></app-element-interactive>--> <!--<app-element-interactive></app-element-interactive>-->
...@@ -13,7 +13,6 @@ import {DataStore} from './globals'; ...@@ -13,7 +13,6 @@ import {DataStore} from './globals';
selector: 'app-root', selector: 'app-root',
templateUrl: './app.component.html', templateUrl: './app.component.html',
styleUrls: ['./app.component.css'], styleUrls: ['./app.component.css'],
providers: [AppService, HttpService],
// directives: [LeftbarComponent, TermComponent] // directives: [LeftbarComponent, TermComponent]
}) })
......
...@@ -12,23 +12,27 @@ ...@@ -12,23 +12,27 @@
import {BrowserModule} from '@angular/platform-browser'; import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core'; import {NgModule} from '@angular/core';
import {FormsModule} from '@angular/forms'; // <-- NgModel lives here import {FormsModule} from '@angular/forms'; // <-- NgModel lives here
import {Logger, Options, Level as LoggerLevel} from 'angular2-logger/core'; import {LoggerModule, NGXLogger, NgxLoggerLevel} from 'ngx-logger';
import {HttpModule} from '@angular/http'; import {HttpClientModule} from '@angular/common/http';
import {AppRoutingModule} from './app-routing.module'; import {AppRoutingModule} from './app-routing.module';
import {AppComponent} from './app.component'; import {AppComponent} from './app.component';
// service
import {AppService, HttpService, LogService, UUIDService} from './app.service';
import {LayerService} from './elements/layer/layer.service';
// Elements // Elements
import {ElementFooterComponent} from './elements/footer/footer.component'; import {ElementFooterComponent} from './elements/footer/footer.component';
import {ElementTermComponent} from './elements/term/term.component'; import {ElementTermComponent} from './elements/term/term.component';
import {ElementInteractiveComponent} from './elements/interactive/interactive.component'; import {ElementInteractiveComponent} from './elements/interactive/interactive.component';
import {ElementNavComponent} from './elements/nav/nav.component'; import {ElementNavComponent} from './elements/nav/nav.component';
import {LoginComponent} from './BasicPage/login/login.component';
import {ElementPopupComponent} from './elements/popup/popup.component'; import {ElementPopupComponent} from './elements/popup/popup.component';
import {ElementRdpComponent} from './elements/rdp/rdp.component'; import {ElementRdpComponent} from './elements/rdp/rdp.component';
import {ElementServerMenuComponent} from './elements/server-menu/server-menu.component'; import {ElementServerMenuComponent} from './elements/server-menu/server-menu.component';
import {ElementIframeComponent} from './elements/iframe/iframe.component'; import {ElementIframeComponent} from './elements/iframe/iframe.component';
// pages // pages
import {LoginComponent} from './BasicPage/login/login.component';
import {IleftbarComponent} from './IndexPage/ileftbar/ileftbar.component'; import {IleftbarComponent} from './IndexPage/ileftbar/ileftbar.component';
import {SearchComponent, SearchFilter} from './ControlPage/search/search.component'; import {SearchComponent, SearchFilter} from './ControlPage/search/search.component';
import {CleftbarComponent} from './ControlPage/cleftbar/cleftbar.component'; import {CleftbarComponent} from './ControlPage/cleftbar/cleftbar.component';
...@@ -46,13 +50,21 @@ import {UtcDatePipe} from './app.pipe'; ...@@ -46,13 +50,21 @@ import {UtcDatePipe} from './app.pipe';
import {MonitorPageComponent} from './monitor-page/monitor-page.component'; import {MonitorPageComponent} from './monitor-page/monitor-page.component';
import {LinuxComponent} from './monitor-page/linux/linux.component'; import {LinuxComponent} from './monitor-page/linux/linux.component';
import {WindowsComponent} from './monitor-page/windows/windows.component'; import {WindowsComponent} from './monitor-page/windows/windows.component';
import {NgProgressModule} from 'ngx-progressbar';
import {TestPageComponent} from './test-page/test-page.component';
import { BlankPageComponent } from './blank-page/blank-page.component';
// import {NgxLayerModule} from 'ngx-layer';
@NgModule({ @NgModule({
imports: [ imports: [
BrowserModule, BrowserModule,
FormsModule, FormsModule,
AppRoutingModule, AppRoutingModule,
HttpModule, NgProgressModule,
HttpClientModule,
LoggerModule.forRoot({serverLoggingUrl: '/api/logs', level: NgxLoggerLevel.DEBUG, serverLogLevel: NgxLoggerLevel.ERROR}),
// NgxLayerModule
], ],
declarations: [ declarations: [
AppComponent, AppComponent,
...@@ -83,11 +95,19 @@ import {WindowsComponent} from './monitor-page/windows/windows.component'; ...@@ -83,11 +95,19 @@ import {WindowsComponent} from './monitor-page/windows/windows.component';
MonitorPageComponent, MonitorPageComponent,
LinuxComponent, LinuxComponent,
WindowsComponent, WindowsComponent,
TestPageComponent,
BlankPageComponent,
], ],
bootstrap: [AppComponent], bootstrap: [AppComponent],
providers: [ providers: [
{provide: Options, useValue: {store: false, level: LoggerLevel.WARN}}, // {provide: LoggerConfig, useValue: {level: LoggerLevel.WARN}},
Logger // {provide: BrowserXhr, useClass: NgProgressBrowserXhr},
AppService,
HttpService,
LogService,
UUIDService,
LayerService,
NGXLogger
] ]
}) })
export class AppModule { export class AppModule {
......
...@@ -6,120 +6,170 @@ ...@@ -6,120 +6,170 @@
* @author liuzheng <liuzheng712@gmail.com> * @author liuzheng <liuzheng712@gmail.com>
*/ */
import {Injectable, OnInit} from '@angular/core'; import {Injectable, OnInit} from '@angular/core';
import {Http, RequestOptionsArgs, Headers} from '@angular/http';
import {Router} from '@angular/router'; import {Router} from '@angular/router';
import {Cookie} from 'ng2-cookies/ng2-cookies'; // import {Cookie} from 'ng2-cookies/ng2-cookies';
import {Logger} from 'angular2-logger/core';
import 'rxjs/add/operator/map'; import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch'; import 'rxjs/add/operator/catch';
import {DataStore, User, Browser} from './globals'; import {DataStore, User, Browser} from './globals';
import {environment} from '../environments/environment';
import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';
import {NGXLogger} from 'ngx-logger';
import {HostGroup} from './ControlPage/cleftbar/cleftbar.component';
import * as UUID from 'uuid-js/lib/uuid.js';
declare function unescape(s: string): string; declare function unescape(s: string): string;
@Injectable() @Injectable()
export class HttpService { export class HttpService {
headers = new Headers(); headers = new HttpHeaders();
constructor(private _http: Http) { constructor(private http: HttpClient) {
} }
// request(url: string | Request, options?: RequestOptionsArgs) { get(url: string, options?: any) {
// if (options == null) { return this.http.get(url, options);
// options = {};
// }
// options.headers = this.headers;
// return this._http.request(url, options)
// }
get(url: string, options?: RequestOptionsArgs) {
if (options == null) {
options = {};
} }
options.headers = this.headers;
return this._http.get(url, options); post(url: string, options?: any) {
return this.http.post(url, options);
} }
post(url: string, body: any, options?: RequestOptionsArgs) { put(url: string, options?: any) {
if (options == null) { return this.http.put(url, options);
options = {};
} }
options.headers = this.headers;
return this._http.post(url, body, options); delete(url: string, options?: any) {
return this.http.delete(url, options);
} }
put(url: string, body: any, options?: RequestOptionsArgs) { patch(url: string, options?: any) {
if (options == null) { return this.http.patch(url, options);
options = {};
} }
options.headers = this.headers;
return this._http.put(url, body, options); head(url: string, options?: any) {
return this.http.head(url, options);
} }
delete(url: string, options?: RequestOptionsArgs) { options(url: string, options?: any) {
if (options == null) { return this.http.options(url, options);
options = {};
} }
options.headers = this.headers;
return this._http.delete(url, options); report_browser() {
return this.http.post('/api/browser', JSON.stringify(Browser));
} }
patch(url: string, body: any, options?: RequestOptionsArgs) { check_login(user: any) {
if (options == null) { return this.http.post('/api/checklogin', user);
options = {};
} }
options.headers = this.headers;
return this._http.patch(url, body, options); get_user_profile() {
return this.http.get('/api/users/v1/profile/');
} }
head(url: string, options?: RequestOptionsArgs) { get_my_asset_groups_assets() {
if (options == null) { return this.http.get<Array<HostGroup>>('/api/perms/v1/user/my/asset-groups-assets/');
options = {};
} }
options.headers = this.headers;
return this._http.head(url, options); get_guacamole_token(username: string, assetID: string, systemUserID: string) {
const body = new HttpParams()
.set('username', username)
.set('password', 'jumpserver')
.set('asset_id', assetID)
.set('system_user_id', systemUserID);
return this.http.post('/guacamole/api/tokens', body.toString(), {headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')});
} }
options(url: string, options?: RequestOptionsArgs) { search(q: string) {
if (options == null) { return this.http.get('/api/search?q=' + q);
options = {};
} }
options.headers = this.headers;
return this._http.options(url, options); get_replay(token: string) {
return this.http.get('/api/terminal/v1/sessions/' + token + '/replay');
} }
} }
@Injectable() @Injectable()
export class AppService implements OnInit { export class LogService {
// user:User = user ; level: number;
constructor(private _http: HttpService, constructor(private _logger: NGXLogger) {
private _router: Router,
private _logger: Logger) {
if (Cookie.get('loglevel')) {
// 0.- Level.OFF // 0.- Level.OFF
// 1.- Level.ERROR // 1.- Level.ERROR
// 2.- Level.WARN // 2.- Level.WARN
// 3.- Level.INFO // 3.- Level.INFO
// 4.- Level.DEBUG // 4.- Level.DEBUG
// 5.- Level.LOG // 5.- Level.LOG
this._logger.level = parseInt(Cookie.get('loglevel'), 10); this.level = 4;
// this._logger.debug('Your debug stuff');
// this._logger.info('An info');
// this._logger.warn('Take care ');
// this._logger.error('Too late !');
// this._logger.log('log !');
} else {
Cookie.set('loglevel', '0', 99, '/', document.domain);
// this._logger.level = parseInt(Cookie.getCookie('loglevel'));
this._logger.level = 0;
} }
// this.checklogin(); log(message: any, ...additional: any[]) {
if (this.level > 4) {
this._logger.log(message, ...additional);
}
} }
ngOnInit() { debug(message: any, ...additional: any[]) {
if (this.level > 3) {
this._logger.debug(message, ...additional);
}
}
info(message: any, ...additional: any[]) {
if (this.level > 2) {
this._logger.info(message, ...additional);
}
}
warn(message: any, ...additional: any[]) {
if (this.level > 1) {
this._logger.warn(message, ...additional);
}
}
error(message: any, ...additional: any[]) {
if (this.level > 0) {
this._logger.error(message, ...additional);
}
}
}
@Injectable()
export class AppService implements OnInit {
// user:User = user ;
constructor(private _http: HttpService,
private _router: Router,
private _logger: LogService) {
// if (Cookie.get('loglevel')) {
// // 0.- Level.OFF
// // 1.- Level.ERROR
// // 2.- Level.WARN
// // 3.- Level.INFO
// // 4.- Level.DEBUG
// // 5.- Level.LOG
// this._logger.level = parseInt(Cookie.get('loglevel'), 10);
// // this._logger.debug('Your debug stuff');
// // this._logger.info('An info');
// // this._logger.warn('Take care ');
// // this._logger.error('Too late !');
// // this._logger.log('log !');
// } else {
// Cookie.set('loglevel', '0', 99, '/', document.domain);
// // this._logger.level = parseInt(Cookie.getCookie('loglevel'));
// this._logger.level = 0;
// }
if (environment.production) {
this.checklogin();
}
// this._logger
// .debug(this._http.get_user_profile());
} }
ngOnInit() {
}
checklogin() { checklogin() {
this._logger.log('service.ts:AppService,checklogin'); this._logger.log('service.ts:AppService,checklogin');
...@@ -134,33 +184,45 @@ export class AppService implements OnInit { ...@@ -134,33 +184,45 @@ export class AppService implements OnInit {
} }
// jQuery('angular2').show(); // jQuery('angular2').show();
} else { } else {
this.browser(); // this.browser();
this._http.get('/api/checklogin') this._http.get_user_profile()
.map(res => res.json())
.subscribe( .subscribe(
data => { data => {
User.name = data.name; User.id = data['id'];
User.username = data.username; User.name = data['name'];
User.logined = data.logined; 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._logger.debug(User);
}, },
err => { err => {
this._logger.error(err); // this._logger.error(err);
User.logined = false; User.logined = false;
this._router.navigate(['login']); window.location.href = document.location.origin + '/users/login?next=' + document.location.pathname;
// this._router.navigate(['login']);
}, },
() => { // () => {
if (User.logined) { // if (User.logined) {
if (document.location.pathname === '/login') { // if (document.location.pathname === '/login') {
this._router.navigate(['']); // this._router.navigate(['']);
} else { // } else {
this._router.navigate([document.location.pathname]); // this._router.navigate([document.location.pathname]);
} // }
} else { // } else {
this._router.navigate(['login']); // this._router.navigate(['login']);
} // }
// jQuery('angular2').show(); // jQuery('angular2').show();
} // }
); );
} }
} }
...@@ -170,9 +232,8 @@ export class AppService implements OnInit { ...@@ -170,9 +232,8 @@ export class AppService implements OnInit {
} }
} }
browser() { browser() {
this._http.post('/api/browser', JSON.stringify(Browser)).map(res => res.json()).subscribe(); this._http.report_browser();
} }
getQueryString(name) { getQueryString(name) {
...@@ -302,3 +363,14 @@ export class AppService implements OnInit { ...@@ -302,3 +363,14 @@ export class AppService implements OnInit {
// //
// } // }
} }
@Injectable()
export class UUIDService {
constructor() {
}
gen() {
return UUID.create()['hex'];
}
}
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { BlankPageComponent } from './blank-page.component';
describe('BlankPageComponent', () => {
let component: BlankPageComponent;
let fixture: ComponentFixture<BlankPageComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ BlankPageComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(BlankPageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import {Component, OnInit} from '@angular/core';
import {DataStore} from '../globals';
@Component({
selector: 'app-blank-page',
templateUrl: './blank-page.component.html',
styleUrls: ['./blank-page.component.scss']
})
export class BlankPageComponent implements OnInit {
constructor() {
DataStore.NavShow = false;
}
ngOnInit() {
}
}
...@@ -6,8 +6,7 @@ ...@@ -6,8 +6,7 @@
* @author liuzheng <liuzheng712@gmail.com> * @author liuzheng <liuzheng712@gmail.com>
*/ */
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {AppService} from '../../app.service'; import {AppService, LogService} from '../../app.service';
import {Logger} from 'angular2-logger/core';
import {DataStore, User} from '../../globals'; import {DataStore, User} from '../../globals';
import {version} from '../../../environments/environment'; import {version} from '../../../environments/environment';
...@@ -22,7 +21,7 @@ export class ElementFooterComponent implements OnInit { ...@@ -22,7 +21,7 @@ export class ElementFooterComponent implements OnInit {
version = version; version = version;
constructor(private _appService: AppService, constructor(private _appService: AppService,
private _logger: Logger) { private _logger: LogService) {
this._logger.log('nav.ts:NavComponent'); this._logger.log('nav.ts:NavComponent');
// this._appService.getnav() // this._appService.getnav()
} }
......
...@@ -2,6 +2,9 @@ import {Component, Input, OnInit} from '@angular/core'; ...@@ -2,6 +2,9 @@ import {Component, Input, OnInit} from '@angular/core';
import {DomSanitizer} from '@angular/platform-browser'; import {DomSanitizer} from '@angular/platform-browser';
import {NavList} from '../../ControlPage/control/control.component'; import {NavList} from '../../ControlPage/control/control.component';
import {User} from '../../globals';
import {HttpService, LogService} from '../../app.service';
@Component({ @Component({
selector: 'app-element-iframe', selector: 'app-element-iframe',
templateUrl: './iframe.component.html', templateUrl: './iframe.component.html',
...@@ -13,11 +16,24 @@ export class ElementIframeComponent implements OnInit { ...@@ -13,11 +16,24 @@ export class ElementIframeComponent implements OnInit {
@Input() index: number; @Input() index: number;
target: string; target: string;
constructor(private sanitizer: DomSanitizer) { constructor(private sanitizer: DomSanitizer,
private _http: HttpService,
private _logger: LogService) {
} }
ngOnInit() { ngOnInit() {
this.target = 'http://ilz.me/'; // /guacamole/api/tokens will redirect to http://guacamole/api/tokens
this._http.get_guacamole_token(User.name, this.host.id, this.userid).subscribe(
data => {
const base = window.btoa(this.host.hostname + '\0' + 'c' + '\0' + 'jumpserver');
// /guacamole/client will redirect to http://guacamole/#/client
this.target = document.location.origin +
'/guacamole/#/client/' + base + '?token=' + data['authToken'];
},
error2 => {
this._logger.error(error2);
}
);
} }
trust(url) { trust(url) {
......
import {Injectable} from '@angular/core';
import * as layer from 'layui-layer/src/layer.js';
@Injectable()
export class LayerService {
constructor() {
}
open(options: any) {
layer.open(options);
}
dialog() {
}
confirm() {
}
tip() {
}
loading() {
}
alert() {
// alert('sss');
}
close(index: any) {
layer.close(index);
}
}
...@@ -6,9 +6,7 @@ ...@@ -6,9 +6,7 @@
* @author liuzheng <liuzheng712@gmail.com> * @author liuzheng <liuzheng712@gmail.com>
*/ */
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {Logger} from 'angular2-logger/core'; import {AppService, HttpService, LogService} from '../../app.service';
import {AppService, HttpService} from '../../app.service';
import {CleftbarComponent} from '../../ControlPage/cleftbar/cleftbar.component'; import {CleftbarComponent} from '../../ControlPage/cleftbar/cleftbar.component';
import {ControlComponent, NavList} from '../../ControlPage/control/control.component'; import {ControlComponent, NavList} from '../../ControlPage/control/control.component';
import {DataStore} from '../../globals'; import {DataStore} from '../../globals';
...@@ -30,7 +28,7 @@ export class ElementNavComponent implements OnInit { ...@@ -30,7 +28,7 @@ export class ElementNavComponent implements OnInit {
constructor(private _appService: AppService, constructor(private _appService: AppService,
private _http: HttpService, private _http: HttpService,
private _logger: Logger) { private _logger: LogService) {
this._logger.log('nav.ts:NavComponent'); this._logger.log('nav.ts:NavComponent');
this.getnav(); this.getnav();
} }
......
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {LayerService} from '../layer/layer.service';
export class Menu { export class Menu {
name: string; name: string;
...@@ -9,14 +11,14 @@ export class Menu { ...@@ -9,14 +11,14 @@ export class Menu {
@Component({ @Component({
selector: 'app-element-server-menu', selector: 'app-element-server-menu',
templateUrl: './server-menu.component.html', templateUrl: './server-menu.component.html',
styleUrls: ['./server-menu.component.scss'] styleUrls: ['./server-menu.component.scss'],
}) })
export class ElementServerMenuComponent implements OnInit { export class ElementServerMenuComponent implements OnInit {
MenuList: Array<any>; MenuList: Array<any>;
top: number; top: number;
left: number; left: number;
constructor() { constructor(private ly: LayerService) {
} }
ngOnInit() { ngOnInit() {
...@@ -27,6 +29,7 @@ export class ElementServerMenuComponent implements OnInit { ...@@ -27,6 +29,7 @@ export class ElementServerMenuComponent implements OnInit {
m.type = 'lll'; m.type = 'lll';
line.type = 'line'; line.type = 'line';
this.MenuList = [m, m, line, m, m]; this.MenuList = [m, m, line, m, m];
this.ly.alert();
} }
public contextmenu(top: number, left: number) { public contextmenu(top: number, left: number) {
......
...@@ -4,7 +4,7 @@ import {term, Terminal, TermWS} from '../../globals'; ...@@ -4,7 +4,7 @@ import {term, Terminal, TermWS} from '../../globals';
import {Cookie} from 'ng2-cookies/ng2-cookies'; import {Cookie} from 'ng2-cookies/ng2-cookies';
import {NavList} from '../../ControlPage/control/control.component'; import {NavList} from '../../ControlPage/control/control.component';
import * as jQuery from 'jquery/dist/jquery.min.js'; import * as jQuery from 'jquery/dist/jquery.min.js';
import * as UUID from 'uuid-js/lib/uuid.js'; import {UUIDService} from '../../app.service';
@Component({ @Component({
selector: 'app-element-term', selector: 'app-element-term',
...@@ -20,11 +20,11 @@ export class ElementTermComponent implements OnInit, AfterViewInit { ...@@ -20,11 +20,11 @@ export class ElementTermComponent implements OnInit, AfterViewInit {
secret: string; secret: string;
term: any; term: any;
constructor() { constructor(private _uuid: UUIDService) {
} }
ngOnInit() { ngOnInit() {
this.secret = UUID.create()['hex']; this.secret = this._uuid.gen();
this.term = Terminal({ this.term = Terminal({
cols: 80, cols: 80,
rows: 24, rows: 24,
...@@ -44,7 +44,7 @@ export class ElementTermComponent implements OnInit, AfterViewInit { ...@@ -44,7 +44,7 @@ export class ElementTermComponent implements OnInit, AfterViewInit {
} }
} else { } else {
term.col = Math.floor(jQuery(this.el.nativeElement).width() / jQuery('#liuzheng').width() * 8) - 3; term.col = Math.floor(jQuery(this.el.nativeElement).width() / jQuery('#liuzheng').width() * 8) - 3;
term.row = Math.floor(jQuery(this.el.nativeElement).height() / jQuery('#liuzheng').height()) - 5; term.row = Math.floor(jQuery(this.el.nativeElement).height() / jQuery('#liuzheng').height()) - 3;
term.term = this.term; term.term = this.term;
} }
this.term.open(this.el.nativeElement, true); this.term.open(this.el.nativeElement, true);
...@@ -87,6 +87,12 @@ export class ElementTermComponent implements OnInit, AfterViewInit { ...@@ -87,6 +87,12 @@ export class ElementTermComponent implements OnInit, AfterViewInit {
TermWS.on('disconnect', function () { TermWS.on('disconnect', function () {
that.TerminalDisconnect(); that.TerminalDisconnect();
}); });
TermWS.on('logout', function (data) {
if (data['room'] === NavList.List[that.index].room) {
NavList.List[this.index].connected = false;
this.term.write('\r\n\x1b[31mBye Bye!\x1b[m\r\n');
}
});
TermWS.on('room', function (data) { TermWS.on('room', function (data) {
if (data['secret'] === that.secret) { if (data['secret'] === that.secret) {
NavList.List[that.index].room = data['room']; NavList.List[that.index].room = data['room'];
......
'use strict'; 'use strict';
import * as terminal from 'term.js/src/term.js'; import * as terminal from 'xterm/dist/xterm';
import * as io from 'socket.io-client'; import * as io from 'socket.io-client';
export function Terminal(xargs: any) { export function Terminal(xargs: any) {
...@@ -66,9 +66,13 @@ export let User: { ...@@ -66,9 +66,13 @@ export let User: {
avatar: string; avatar: string;
role: string; role: string;
email: string; email: string;
wechat: string;
comment: string;
is_active: boolean; is_active: boolean;
is_superuser: boolean;
date_joined: string; date_joined: string;
last_login: string; last_login: string;
date_expired: string;
groups: Array<Group>; groups: Array<Group>;
logined: boolean; logined: boolean;
} = { } = {
...@@ -80,9 +84,13 @@ export let User: { ...@@ -80,9 +84,13 @@ export let User: {
avatar: '', avatar: '',
role: '', role: '',
email: '', email: '',
wechat: '',
comment: '',
is_active: false, is_active: false,
is_superuser: false,
date_joined: '', date_joined: '',
last_login: '', last_login: '',
date_expired: '',
groups: [], groups: [],
logined: false, logined: false,
}; };
......
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {ActivatedRoute, Params} from '@angular/router'; import {ActivatedRoute, Params} from '@angular/router';
import {Logger} from 'angular2-logger/core'; import {HttpService, LogService} from '../app.service';
import {HttpService} from '../app.service';
import {Video, DataStore} from '../globals'; import {Video, DataStore} from '../globals';
@Component({ @Component({
...@@ -14,7 +13,7 @@ export class ReplayPageComponent implements OnInit { ...@@ -14,7 +13,7 @@ export class ReplayPageComponent implements OnInit {
constructor(private activatedRoute: ActivatedRoute, constructor(private activatedRoute: ActivatedRoute,
private _http: HttpService, private _http: HttpService,
private _logger: Logger) { private _logger: LogService) {
// this.video = {'type': 'none'}; // this.video = {'type': 'none'};
DataStore.NavShow = false; DataStore.NavShow = false;
...@@ -25,8 +24,7 @@ export class ReplayPageComponent implements OnInit { ...@@ -25,8 +24,7 @@ export class ReplayPageComponent implements OnInit {
this.activatedRoute.params.subscribe((params: Params) => { this.activatedRoute.params.subscribe((params: Params) => {
token = params['token']; token = params['token'];
}); });
this._http.get('/api/terminal/v1/sessions/' + token + '/replay') this._http.get_replay(token)
.map(res => res.json())
.subscribe( .subscribe(
data => { data => {
Video.type = 'json'; Video.type = 'json';
...@@ -38,6 +36,7 @@ export class ReplayPageComponent implements OnInit { ...@@ -38,6 +36,7 @@ export class ReplayPageComponent implements OnInit {
Video.totalTime = Video.timelist[Video.timelist.length - 1] * 1000; Video.totalTime = Video.timelist[Video.timelist.length - 1] * 1000;
}, },
err => { err => {
alert('无法下载');
this._logger.error(err); this._logger.error(err);
}, },
); );
......
<p>
test-page works!
</p>
<!--<ngx-layer></ngx-layer>-->
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TestPageComponent } from './test-page.component';
describe('TestPageComponent', () => {
let component: TestPageComponent;
let fixture: ComponentFixture<TestPageComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ TestPageComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(TestPageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-test-page',
templateUrl: './test-page.component.html',
styleUrls: ['./test-page.component.scss']
})
export class TestPageComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}
...@@ -9,3 +9,60 @@ $FontPathOpenSans: "~npm-font-open-sans/fonts"; ...@@ -9,3 +9,60 @@ $FontPathOpenSans: "~npm-font-open-sans/fonts";
@import '~npm-font-open-sans/open-sans'; @import '~npm-font-open-sans/open-sans';
$roboto-font-path: "~roboto-fontface/fonts"; $roboto-font-path: "~roboto-fontface/fonts";
@import "~roboto-fontface/css/mixins.scss"; @import "~roboto-fontface/css/mixins.scss";
/*
*
* INSPINIA - Responsive Admin Theme
* version 2.7.1
*
*/
$asset-path: '../static/imgs/inspinia';
// Variables, Mixins
@import "../assets/inspinia/imports/variables";
@import "../assets/inspinia/imports/mixins";
// INSPINIA Theme Elements
@import "../assets/inspinia/imports/typography";
@import "../assets/inspinia/imports/navigation";
@import "../assets/inspinia/imports/top_navigation";
@import "../assets/inspinia/imports/buttons";
@import "../assets/inspinia/imports/badges_labels";
@import "../assets/inspinia/imports/elements";
@import "../assets/inspinia/imports/sidebar";
@import "../assets/inspinia/imports/base";
@import "../assets/inspinia/imports/pages";
@import "../assets/inspinia/imports/chat";
@import "../assets/inspinia/imports/metismenu";
@import "../assets/inspinia/imports/spinners";
// Landing page styles
//@import "../assets/inspinia/imports/landing";
// RTL Support
@import "../assets/inspinia/imports/rtl";
// For demo only - config box style
@import "../assets/inspinia/imports/theme-config";
// INSPINIA Skins
@import "../assets/inspinia/imports/skins";
@import "../assets/inspinia/imports/md-skin";
// Media query style
@import "../assets/inspinia/imports/media";
// Custom style
// Your custom style to override base style
@import "../assets/inspinia/imports/custom";
// Clear layout on print mode
@media print {
nav.navbar-static-side {
display: none;
}
body { overflow: visible !important; }
#page-wrapper {
margin: 0;
}
}
...@@ -31,6 +31,7 @@ app-root { ...@@ -31,6 +31,7 @@ app-root {
font-size: 11px !important; font-size: 11px !important;
padding-bottom: 16px !important; padding-bottom: 16px !important;
font-family: 'Monaco', Inconsolata !important; font-family: 'Monaco', Inconsolata !important;
color: white;
} }
.terminal { .terminal {
......
...@@ -7,12 +7,12 @@ ...@@ -7,12 +7,12 @@
set -ex set -ex
git checkout publish && \ git checkout github_dev && \
git pull github dev --rebase && \ git pull github dev --rebase && \
git merge master -m "publish" && \ git merge dev -m "publish" && \
git reset --soft HEAD^ && \ git reset --soft HEAD^ && \
git commit -m "publish" && \ git commit -m "publish" && \
git push github publish:dev && \ git push github github_dev:dev && \
echo "success" echo "success"
git checkout master git checkout dev
git pull github dev --commit && git push origin master git pull github dev --commit && git push origin dev
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