feat: publish

parent d9da0fed
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
"testTsconfig": "tsconfig.spec.json", "testTsconfig": "tsconfig.spec.json",
"prefix": "app", "prefix": "app",
"styles": [ "styles": [
"../node_modules/layui-layer/dist/theme/default/layer.css",
"../node_modules/animate.css/animate.min.css", "../node_modules/animate.css/animate.min.css",
"../node_modules/xterm/dist/xterm.css", "../node_modules/xterm/dist/xterm.css",
"sass/style.scss", "sass/style.scss",
......
...@@ -84,6 +84,9 @@ class SSHws(Namespace): ...@@ -84,6 +84,9 @@ class SSHws(Namespace):
self.leave_room(room=self.clients[request.sid]["room"]) self.leave_room(room=self.clients[request.sid]["room"])
join_room(room) join_room(room)
def on_token(self, token):
print(token)
def on_disconnect(self): def on_disconnect(self):
print("disconnect") print("disconnect")
for connection in self.clients[request.sid]["chan"]: for connection in self.clients[request.sid]["chan"]:
...@@ -131,6 +134,33 @@ def asset_groups_assets(): ...@@ -131,6 +134,33 @@ def asset_groups_assets():
"ip": "192.168.2.6", "ip": "192.168.2.6",
"port": 22, "port": 22,
"platform": "Linux", "platform": "Linux",
"system_users_granted": [
{
"id": 1,
"name": "web",
"username": "web",
"protocol": "ssh",
"auth_method": "P",
"auto_push": True,
"priority": 10
},
{
"id": 2,
"name": "liuzheng",
"username": "liuzheng",
"protocol": "ssh",
"auth_method": "P",
"auto_push": True,
"priority": 10
}],
},
{
"id": 44,
"hostname": "192.168.1.6",
"ip": "192.168.2.6",
"port": 22,
"platform": "Linux",
"system_users_granted": [ "system_users_granted": [
{ {
"id": 1, "id": 1,
......
...@@ -107,9 +107,9 @@ ...@@ -107,9 +107,9 @@
} }
}, },
"@angular/cdk": { "@angular/cdk": {
"version": "5.1.0", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-5.1.0.tgz", "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-5.1.1.tgz",
"integrity": "sha512-xDCVx65SvxoGDMpQhaQvfP7bZhQDuX65Uk+JntPlLTiwFr7v82a+71RnzOCzNKyaNXGoIgUGcrLZpozlyqNgFg==", "integrity": "sha512-V8kQmwf1PhtxiiE0cS1x9SW7/VFrJ7LcL9RqxUOMmJMl8kVR43dQBEeuVOOYJlGo9LAR5ctfemlJHwd9+PoHew==",
"requires": { "requires": {
"tslib": "1.8.1" "tslib": "1.8.1"
} }
...@@ -258,6 +258,14 @@ ...@@ -258,6 +258,14 @@
"integrity": "sha512-Yj/y5XrBBXbtwnZ6HJOBl/0XS/JBvVlHb1UWw5MIrsc81k7/eFiRAIKzmGpAba+Sw0G0dO22ABZ4yJjAMsML6A==", "integrity": "sha512-Yj/y5XrBBXbtwnZ6HJOBl/0XS/JBvVlHb1UWw5MIrsc81k7/eFiRAIKzmGpAba+Sw0G0dO22ABZ4yJjAMsML6A==",
"dev": true "dev": true
}, },
"@angular/material": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-5.1.1.tgz",
"integrity": "sha512-RC3xkbX35daNq4w+XBmm+Vgi16TJvLbSkw5xkdxCqLSysFx9ymwDOjUbLeHt2nJtvYWvnSjuVukdSAeaBknTFg==",
"requires": {
"tslib": "1.8.1"
}
},
"@angular/platform-browser": { "@angular/platform-browser": {
"version": "5.2.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.2.0.tgz", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.2.0.tgz",
......
...@@ -12,13 +12,14 @@ ...@@ -12,13 +12,14 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "5.2.0", "@angular/animations": "^5.2.0",
"@angular/cdk": "^5.1.0", "@angular/cdk": "^5.1.1",
"@angular/common": "5.2.0", "@angular/common": "5.2.0",
"@angular/compiler": "5.2.0", "@angular/compiler": "5.2.0",
"@angular/core": "5.2.0", "@angular/core": "5.2.0",
"@angular/forms": "5.2.0", "@angular/forms": "5.2.0",
"@angular/http": "5.2.0", "@angular/http": "5.2.0",
"@angular/material": "^5.1.1",
"@angular/platform-browser": "5.2.0", "@angular/platform-browser": "5.2.0",
"@angular/platform-browser-dynamic": "5.2.0", "@angular/platform-browser-dynamic": "5.2.0",
"@angular/router": "5.2.0", "@angular/router": "5.2.0",
...@@ -38,7 +39,6 @@ ...@@ -38,7 +39,6 @@
"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",
"layui-layer": "git+https://github.com/jumpserver/layer.git",
"materialize-css": "^0.100.2", "materialize-css": "^0.100.2",
"metismenu": "^2.5.0", "metismenu": "^2.5.0",
"mstsc.js": "^0.2.4", "mstsc.js": "^0.2.4",
...@@ -61,9 +61,9 @@ ...@@ -61,9 +61,9 @@
"socket.io-client": "^2.0.4", "socket.io-client": "^2.0.4",
"ssh-keygen": "^0.4.1", "ssh-keygen": "^0.4.1",
"tether": "^1.4.0", "tether": "^1.4.0",
"tslib": "1.8.1",
"uuid-js": "^0.7.5", "uuid-js": "^0.7.5",
"xterm": "^2.9.2", "xterm": "^2.9.2",
"tslib": "1.8.1",
"zone.js": "0.8.20" "zone.js": "0.8.20"
}, },
"devDependencies": { "devDependencies": {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* @author liuzheng <liuzheng712@gmail.com> * @author liuzheng <liuzheng712@gmail.com>
*/ */
import {Component, OnInit} from '@angular/core'; import {Component, Inject, OnInit} from '@angular/core';
import {AppService, HttpService, LogService} from '../../app.service'; import {AppService, HttpService, LogService} from '../../app.service';
import {SearchComponent} from '../search/search.component'; import {SearchComponent} from '../search/search.component';
import {DataStore} from '../../globals'; import {DataStore} from '../../globals';
...@@ -15,7 +15,10 @@ import {version} from '../../../environments/environment'; ...@@ -15,7 +15,10 @@ import {version} from '../../../environments/environment';
import * as jQuery from 'jquery/dist/jquery.min.js'; import * as jQuery from 'jquery/dist/jquery.min.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'; import {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from '@angular/material';
import {logger} from 'codelyzer/util/logger';
import {selector} from 'rxjs/operator/publish';
import {FormControl, Validators} from '@angular/forms';
export interface HostGroup { export interface HostGroup {
...@@ -51,30 +54,30 @@ export class CleftbarComponent implements OnInit { ...@@ -51,30 +54,30 @@ export class CleftbarComponent implements OnInit {
static Hide() { static Hide() {
DataStore.leftbarshow = false; DataStore.leftbarshow = false;
DataStore.Nav.map(function (value, i) { DataStore.Nav.map(function (value, i) {
for (var ii in value['children']) { value['children'].forEach((v, key) => {
if (DataStore.Nav[i]['children'][ii]['id'] === 'HindLeftManager') { if (DataStore.Nav[i]['children'][key]['id'] === 'HindLeftManager') {
DataStore.Nav[i]['children'][ii] = { DataStore.Nav[i]['children'][key] = {
'id': 'ShowLeftManager', 'id': 'ShowLeftManager',
'click': 'ShowLeft', 'click': 'ShowLeft',
'name': 'Show left manager' 'name': 'Show left manager'
}; };
} }
} });
}); });
} }
static Show() { static Show() {
DataStore.leftbarshow = true; DataStore.leftbarshow = true;
DataStore.Nav.map(function (value, i) { DataStore.Nav.map(function (value, i) {
for (var ii in value['children']) { value['children'].forEach((v, key) => {
if (DataStore.Nav[i]['children'][ii]['id'] === 'ShowLeftManager') { if (DataStore.Nav[i]['children'][key]['id'] === 'ShowLeftManager') {
DataStore.Nav[i]['children'][ii] = { DataStore.Nav[i]['children'][key] = {
'id': 'HindLeftManager', 'id': 'HindLeftManager',
'click': 'HideLeft', 'click': 'HideLeft',
'name': 'Hind left manager' 'name': 'Hind left manager'
}; };
} }
} });
}); });
} }
...@@ -83,7 +86,7 @@ export class CleftbarComponent implements OnInit { ...@@ -83,7 +86,7 @@ export class CleftbarComponent implements OnInit {
private _search: SearchComponent, private _search: SearchComponent,
private _logger: LogService, private _logger: LogService,
private _menu: ElementServerMenuComponent, private _menu: ElementServerMenuComponent,
private _layer: LayerService) { public _dialog: MatDialog) {
this._logger.log('nav.ts:NavComponent'); this._logger.log('nav.ts:NavComponent');
// this._appService.getnav() // this._appService.getnav()
} }
...@@ -101,12 +104,12 @@ export class CleftbarComponent implements OnInit { ...@@ -101,12 +104,12 @@ export class CleftbarComponent implements OnInit {
if (id) { if (id) {
for (let g of this.HostGroups) { for (let g of this.HostGroups) {
if (g['assets_granted']) { if (g['assets_granted']) {
for (let u of g['assets_granted']) { g['assets_granted'].forEach((v, k) => {
if (u.id.toString() === id.toString()) { if (v.id.toSource() === id.toString()) {
this.Connect(u); this.Connect(v);
return; return;
} }
} });
} }
} }
...@@ -116,39 +119,26 @@ export class CleftbarComponent implements OnInit { ...@@ -116,39 +119,26 @@ export class CleftbarComponent implements OnInit {
Connect(host) { Connect(host) {
// console.log(host); // console.log(host);
let user: any; let user: any;
let options = '';
const that = this;
if (host.system_users_granted.length > 1) { if (host.system_users_granted.length > 1) {
user = this.checkPriority(host.system_users_granted); user = this.checkPriority(host.system_users_granted);
if (user) { if (user) {
this.login(host, user); this.login(host, user);
} else { } else {
for (const u of host.system_users_granted) { const dialogRef = this._dialog.open(CleftbarComponentDialog, {
options += '<option value="' + u.id + '">' + u.username + '</option>'; height: '200px',
} width: '300px',
this._layer.open({ data: {users: host.system_users_granted}
title: 'Please Choose a User', });
scrollbar: false,
moveOut: true, dialogRef.afterClosed().subscribe(result => {
moveType: 1, if (result) {
btn: ['确定', '取消'],
content: '<select id="selectuser">' + options + '</select>',
yes: function (index, layero) {
const userid = jQuery('#selectuser').val();
for (let i of host.system_users_granted) { for (let i of host.system_users_granted) {
if (i.id.toString() === userid.toString()) { if (i.id.toString() === result.toString()) {
user = i; user = i;
break; break;
} }
} }
that.login(host, user); this.login(host, user);
that._layer.close(index);
},
btn2: function (index, layero) {
},
cancel: function () {
// 右上角关闭回调
// return false 开启该代码可禁止点击该按钮关闭
} }
}); });
} }
...@@ -202,3 +192,34 @@ export class CleftbarComponent implements OnInit { ...@@ -202,3 +192,34 @@ export class CleftbarComponent implements OnInit {
// this._menu.contextmenu(this.clientY, this.clientX); // this._menu.contextmenu(this.clientY, this.clientX);
} }
} }
@Component({
selector: 'app-cleftbar-dialog',
templateUrl: 'dialog.html',
})
export class CleftbarComponentDialog implements OnInit {
UserSelectControl = new FormControl('', [Validators.required]);
selected: any;
constructor(public dialogRef: MatDialogRef<CleftbarComponentDialog>,
@Inject(MAT_DIALOG_DATA) public data: any,
private _logger: LogService) {
}
ngOnInit() {
this.selected = this.data.users[0].id;
this.UserSelectControl.setValue(this.selected);
// this._logger.debug(this.UserSelectControl);
}
onNoClick(): void {
this.dialogRef.close();
}
compareFn: ((f1: any, f2: any) => boolean) | null = this.compareByValue;
compareByValue(f1: any, f2: any) {
return f1 && f2 && f1.value === f2.value;
}
}
<h1 mat-dialog-title>Found {{data.users.length}} Users</h1>
<mat-form-field>
<mat-select [(value)]="selected"
[compareWith]="compareFn"
[formControl]="UserSelectControl"
placeholder="Choose a User" required>
<mat-option *ngFor="let u of data.users" value="{{u.id}}">{{u.username}}</mat-option>
</mat-select>
<mat-error *ngIf="UserSelectControl.hasError('required')">Please choose a User</mat-error>
</mat-form-field>
<div style="float: right">
<button mat-raised-button (click)="onNoClick()">Cancel</button>
<button mat-raised-button color="primary" [mat-dialog-close]="selected" cdkFocusInitial>Confirm</button>
</div>
...@@ -53,13 +53,9 @@ export class ControlComponent implements OnInit { ...@@ -53,13 +53,9 @@ export class ControlComponent implements OnInit {
NavList = NavList; NavList = NavList;
static active(id) { static active(id) {
for (let i in NavList.List) { NavList.List.forEach((v, k) => {
if (id.toString() === i) { v.hide = id.toString() !== k;
NavList.List[id].hide = false; });
} else {
NavList.List[i].hide = true;
}
}
NavList.Active = id; NavList.Active = id;
} }
......
...@@ -8,9 +8,9 @@ ...@@ -8,9 +8,9 @@
<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"
[ngClass]="{'active':i==NavList.Active,'disconnected':!m.connected, 'hidden': m.closed != false}" [ngClass]="{'active':i==NavList.Active,'disconnected':!m.connected, 'hidden': m.closed != false}"
id="termnav-{{i}}" (click)="setActive(i)"> id="termnav-{{i}}" (click)="setActive(i)" (dblclick)="m.edit=true;setActive(i)">
<span *ngIf="!m.edit" (dblclick)="m.edit=true;setActive(i)">{{m.nick}}</span> <span *ngIf="!m.edit">{{m.nick}}</span>
<input *ngIf="m.edit" [(ngModel)]="m.nick" autofocus (blur)="m.edit=false" (keyup.enter)="m.edit=false"/> <input *ngIf="m.edit" [(ngModel)]="m.nick" (blur)="m.edit=false" (keyup.enter)="m.edit=false" autofocus="true"/>
<a class="close" (click)="close(m,i)">&times;</a> <a class="close" (click)="close(m,i)">&times;</a>
</li> </li>
</ul> </ul>
......
...@@ -35,14 +35,18 @@ export class ControlnavComponent implements OnInit { ...@@ -35,14 +35,18 @@ export class ControlnavComponent implements OnInit {
} }
static setActive(index) { static setActive(index) {
for (let m in NavList.List) { NavList.List.forEach((value, key) => {
NavList.List[m].hide = true; NavList.List[key].hide = true;
} });
NavList.List[index].hide = false; NavList.List[index].hide = false;
NavList.Active = index; NavList.Active = index;
if (!NavList.List[index].edit) {
if (NavList.List[index].type === 'ssh') { if (NavList.List[index].type === 'ssh') {
NavList.List[index].Term.focus(); NavList.List[index].Term.focus();
} else if (NavList.List[index].type === 'rdp') { } else if (NavList.List[index].type === 'rdp') {
}
} else {
} }
} }
......
import {NgModule} from '@angular/core';
import {
MatAutocompleteModule,
MatButtonModule,
MatButtonToggleModule,
MatCardModule,
MatCheckboxModule,
MatChipsModule,
MatDatepickerModule,
MatDialogModule,
MatExpansionModule,
MatGridListModule,
MatIconModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatNativeDateModule,
MatPaginatorModule,
MatProgressBarModule,
MatProgressSpinnerModule,
MatRadioModule,
MatRippleModule,
MatSelectModule,
MatSidenavModule,
MatSliderModule,
MatSlideToggleModule,
MatSnackBarModule,
MatSortModule,
MatTableModule,
MatTabsModule,
MatToolbarModule,
MatTooltipModule,
MatStepperModule,
} from '@angular/material';
import {CdkTableModule} from '@angular/cdk/table';
@NgModule({
exports: [
CdkTableModule,
MatAutocompleteModule,
MatButtonModule,
MatButtonToggleModule,
MatCardModule,
MatCheckboxModule,
MatChipsModule,
MatStepperModule,
MatDatepickerModule,
MatDialogModule,
MatExpansionModule,
MatGridListModule,
MatIconModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatNativeDateModule,
MatPaginatorModule,
MatProgressBarModule,
MatProgressSpinnerModule,
MatRadioModule,
MatRippleModule,
MatSelectModule,
MatSidenavModule,
MatSliderModule,
MatSlideToggleModule,
MatSnackBarModule,
MatSortModule,
MatTableModule,
MatTabsModule,
MatToolbarModule,
MatTooltipModule,
]
})
export class MaterialModule {
}
...@@ -18,6 +18,7 @@ import {RdpPageComponent} from './rdp-page/rdp-page.component'; ...@@ -18,6 +18,7 @@ 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'; import {BlankPageComponent} from './blank-page/blank-page.component';
import {TestPageComponent} from './test-page/test-page.component';
const appRoutes: Routes = [ const appRoutes: Routes = [
// {path: 'users/login', component: LoginComponent}, // {path: 'users/login', component: LoginComponent},
...@@ -25,7 +26,7 @@ const appRoutes: Routes = [ ...@@ -25,7 +26,7 @@ const appRoutes: Routes = [
{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: TermPageComponent}, {path: 'test', component: TestPageComponent},
{path: 'undefined', component: BlankPageComponent}, {path: 'undefined', component: BlankPageComponent},
{path: '', component: ControlPageComponent}, {path: '', component: ControlPageComponent},
{path: '**', component: NotFoundComponent} {path: '**', component: NotFoundComponent}
......
app-element-nav { app-element-nav {
font-family: 'Roboto', sans-serif; font-family: 'Roboto', sans-serif;
font-size: 13px; font-size: 13px;
......
/**
* Created by liuzheng on 2017/8/30.
*/
/** /**
* app 模块 * app 模块
* *
...@@ -11,16 +7,18 @@ ...@@ -11,16 +7,18 @@
*/ */
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, ReactiveFormsModule} from '@angular/forms'; // <-- NgModel lives here
import {LoggerModule, NGXLogger, NgxLoggerLevel} from 'ngx-logger'; import {LoggerModule, NGXLogger, NgxLoggerLevel} from 'ngx-logger';
import {HttpClientModule} from '@angular/common/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';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
// service // service
import {AppService, HttpService, LogService, UUIDService} from './app.service'; import {AppService, HttpService, LogService, UUIDService} from './app.service';
import {LayerService} from './elements/layer/layer.service'; import {DialogService} from './elements/dialog/dialog.service';
// Elements // Elements
import {ElementFooterComponent} from './elements/footer/footer.component'; import {ElementFooterComponent} from './elements/footer/footer.component';
...@@ -35,7 +33,7 @@ import {ElementIframeComponent} from './elements/iframe/iframe.component'; ...@@ -35,7 +33,7 @@ import {ElementIframeComponent} from './elements/iframe/iframe.component';
import {LoginComponent} from './BasicPage/login/login.component'; 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, CleftbarComponentDialog} from './ControlPage/cleftbar/cleftbar.component';
import {ControlComponent} from './ControlPage/control/control.component'; import {ControlComponent} from './ControlPage/control/control.component';
import {ControlnavComponent} from './ControlPage/control/controlnav/controlnav.component'; import {ControlnavComponent} from './ControlPage/control/controlnav/controlnav.component';
import {ControlPageComponent} from './ControlPage/controlpage.component'; import {ControlPageComponent} from './ControlPage/controlpage.component';
...@@ -51,18 +49,20 @@ import {MonitorPageComponent} from './monitor-page/monitor-page.component'; ...@@ -51,18 +49,20 @@ 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 {NgProgressModule} from 'ngx-progressbar';
import {TestPageComponent} from './test-page/test-page.component'; import {TestPageComponent, TestPageComponentDialog} from './test-page/test-page.component';
import { BlankPageComponent } from './blank-page/blank-page.component'; import {BlankPageComponent} from './blank-page/blank-page.component';
import {MaterialModule} from './MaterialModule.component';
// import {NgxLayerModule} from 'ngx-layer';
@NgModule({ @NgModule({
imports: [ imports: [
BrowserModule, BrowserModule,
BrowserAnimationsModule,
FormsModule, FormsModule,
AppRoutingModule, AppRoutingModule,
NgProgressModule, NgProgressModule,
HttpClientModule, HttpClientModule,
ReactiveFormsModule,
MaterialModule,
LoggerModule.forRoot({serverLoggingUrl: '/api/logs', level: NgxLoggerLevel.DEBUG, serverLogLevel: NgxLoggerLevel.ERROR}), LoggerModule.forRoot({serverLoggingUrl: '/api/logs', level: NgxLoggerLevel.DEBUG, serverLogLevel: NgxLoggerLevel.ERROR}),
// NgxLayerModule // NgxLayerModule
], ],
...@@ -80,7 +80,7 @@ import { BlankPageComponent } from './blank-page/blank-page.component'; ...@@ -80,7 +80,7 @@ import { BlankPageComponent } from './blank-page/blank-page.component';
SearchComponent, SearchComponent,
SearchFilter, SearchFilter,
IleftbarComponent, IleftbarComponent,
CleftbarComponent, CleftbarComponent, CleftbarComponentDialog,
ControlComponent, ControlComponent,
ControlnavComponent, ControlnavComponent,
ControlPageComponent, ControlPageComponent,
...@@ -95,9 +95,13 @@ import { BlankPageComponent } from './blank-page/blank-page.component'; ...@@ -95,9 +95,13 @@ import { BlankPageComponent } from './blank-page/blank-page.component';
MonitorPageComponent, MonitorPageComponent,
LinuxComponent, LinuxComponent,
WindowsComponent, WindowsComponent,
TestPageComponent, TestPageComponent, TestPageComponentDialog,
BlankPageComponent, BlankPageComponent,
], ],
entryComponents: [
CleftbarComponentDialog,
TestPageComponentDialog
],
bootstrap: [AppComponent], bootstrap: [AppComponent],
providers: [ providers: [
// {provide: LoggerConfig, useValue: {level: LoggerLevel.WARN}}, // {provide: LoggerConfig, useValue: {level: LoggerLevel.WARN}},
...@@ -106,7 +110,7 @@ import { BlankPageComponent } from './blank-page/blank-page.component'; ...@@ -106,7 +110,7 @@ import { BlankPageComponent } from './blank-page/blank-page.component';
HttpService, HttpService,
LogService, LogService,
UUIDService, UUIDService,
LayerService, DialogService,
NGXLogger NGXLogger
] ]
}) })
......
import {Injectable} from '@angular/core'; import {Injectable} from '@angular/core';
import * as layer from 'layui-layer/src/layer.js'; // import * as layer from 'layui-layer/src/layer.js';
@Injectable() @Injectable()
export class LayerService { export class DialogService {
constructor() { constructor() {
} }
open(options: any) { open(options: any) {
layer.open(options); // layer.open(options);
} }
dialog() { dialog() {
...@@ -29,6 +29,6 @@ export class LayerService { ...@@ -29,6 +29,6 @@ export class LayerService {
} }
close(index: any) { close(index: any) {
layer.close(index); // layer.close(index);
} }
} }
This diff is collapsed.
/** /**
* footer * footer
* *
*
* @date 2017-11-07 * @date 2017-11-07
* @author liuzheng <liuzheng712@gmail.com> * @author liuzheng <liuzheng712@gmail.com>
*/ */
......
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {LayerService} from '../layer/layer.service'; import {DialogService} from '../dialog/dialog.service';
export class Menu { export class Menu {
...@@ -18,7 +18,7 @@ export class ElementServerMenuComponent implements OnInit { ...@@ -18,7 +18,7 @@ export class ElementServerMenuComponent implements OnInit {
top: number; top: number;
left: number; left: number;
constructor(private ly: LayerService) { constructor(private _dialog: DialogService) {
} }
ngOnInit() { ngOnInit() {
...@@ -29,7 +29,7 @@ export class ElementServerMenuComponent implements OnInit { ...@@ -29,7 +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(); this._dialog.alert();
} }
public contextmenu(top: number, left: number) { public contextmenu(top: number, left: number) {
......
...@@ -15,7 +15,9 @@ export class ElementTermComponent implements OnInit, AfterViewInit { ...@@ -15,7 +15,9 @@ export class ElementTermComponent implements OnInit, AfterViewInit {
@Input() host: any; @Input() host: any;
@Input() userid: any; @Input() userid: any;
@Input() index: number; @Input() index: number;
// @Input() room: string; @Input() token: string;
@Input() monitor: string;
@ViewChild('term') el: ElementRef; @ViewChild('term') el: ElementRef;
secret: string; secret: string;
term: any; term: any;
...@@ -35,7 +37,7 @@ export class ElementTermComponent implements OnInit, AfterViewInit { ...@@ -35,7 +37,7 @@ export class ElementTermComponent implements OnInit, AfterViewInit {
} }
ngAfterViewInit() { ngAfterViewInit() {
if (this.host) { if (this.host || this.token) {
if (Cookie.get('cols')) { if (Cookie.get('cols')) {
term.col = parseInt(Cookie.get('cols'), 10); term.col = parseInt(Cookie.get('cols'), 10);
} }
...@@ -67,16 +69,21 @@ export class ElementTermComponent implements OnInit, AfterViewInit { ...@@ -67,16 +69,21 @@ export class ElementTermComponent implements OnInit, AfterViewInit {
}; };
jQuery(window).resize(); jQuery(window).resize();
if (this.host) {
NavList.List[this.index].Term = this.term; NavList.List[this.index].Term = this.term;
if (this.host) {
// this.term.write('\x1b[31mWelcome to Jumpserver!\x1b[m\r\n');
TermWS.emit('host', {'uuid': this.host.id, 'userid': this.userid, 'secret': this.secret}); TermWS.emit('host', {'uuid': this.host.id, 'userid': this.userid, 'secret': this.secret});
}
if (this.token) {
TermWS.emit('token', {'token': this.token, 'secret': this.secret});
}
if (this.monitor) {
TermWS.emit('monitor', {'token': this.monitor, 'secret': this.secret});
} else {
this.term.on('data', function (data) { this.term.on('data', function (data) {
TermWS.emit('data', {'data': data, 'room': NavList.List[that.index].room}); TermWS.emit('data', {'data': data, 'room': NavList.List[that.index].room});
}); });
}
TermWS.on('data', function (data) { TermWS.on('data', function (data) {
if (data['room'] === NavList.List[that.index].room) { if (data['room'] === NavList.List[that.index].room) {
...@@ -90,7 +97,7 @@ export class ElementTermComponent implements OnInit, AfterViewInit { ...@@ -90,7 +97,7 @@ export class ElementTermComponent implements OnInit, AfterViewInit {
TermWS.on('logout', function (data) { TermWS.on('logout', function (data) {
if (data['room'] === NavList.List[that.index].room) { if (data['room'] === NavList.List[that.index].room) {
NavList.List[this.index].connected = false; NavList.List[this.index].connected = false;
this.term.write('\r\n\x1b[31mBye Bye!\x1b[m\r\n'); // this.term.write('\r\n\x1b[31mBye Bye!\x1b[m\r\n');
} }
}); });
TermWS.on('room', function (data) { TermWS.on('room', function (data) {
...@@ -99,11 +106,10 @@ export class ElementTermComponent implements OnInit, AfterViewInit { ...@@ -99,11 +106,10 @@ export class ElementTermComponent implements OnInit, AfterViewInit {
} }
}); });
} }
}
TerminalDisconnect() { TerminalDisconnect() {
NavList.List[this.index].connected = false; NavList.List[this.index].connected = false;
this.term.write('\r\n\x1b[31mBye Bye!\x1b[m\r\n'); // this.term.write('\r\n\x1b[31mBye Bye!\x1b[m\r\n');
TermWS.emit('logout', NavList.List[this.index].room); TermWS.emit('logout', NavList.List[this.index].room);
} }
} }
...@@ -39,15 +39,13 @@ export let Video: { ...@@ -39,15 +39,13 @@ export let Video: {
}; };
export let Monitor: { export let Monitor: {
sessionid: string, token: string,
room: string, room: string,
type: string, type: string,
socket: any,
} = { } = {
sessionid: '', token: '',
room: '', room: '',
type: 'term', type: 'term',
socket: io.connect(),
}; };
export class Group { export class Group {
......
<app-element-term></app-element-term> <app-element-term
[index]="0"
[monitor]="token"
></app-element-term>
import {Component, OnInit} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {Monitor, term} from '../../globals'; import {Monitor} from '../../globals';
import * as io from 'socket.io-client';
import * as jQuery from 'jquery/dist/jquery.min.js';
@Component({ @Component({
selector: 'app-monitor-linux', selector: 'app-monitor-linux',
...@@ -10,27 +7,13 @@ import * as jQuery from 'jquery/dist/jquery.min.js'; ...@@ -10,27 +7,13 @@ import * as jQuery from 'jquery/dist/jquery.min.js';
styleUrls: ['./linux.component.css'] styleUrls: ['./linux.component.css']
}) })
export class LinuxComponent implements OnInit { export class LinuxComponent implements OnInit {
token: string;
constructor() { constructor() {
} }
ngOnInit() { ngOnInit() {
Monitor.socket = io.connect('/ssh'); this.token = Monitor.token;
Monitor.socket.on('connect', function () {
Monitor.socket.emit('room', Monitor.sessionid);
Monitor.socket.on('room', function (room) {
Monitor.room = room;
console.log(room);
Monitor.socket.emit('join', room);
console.log(Monitor);
});
Monitor.socket.on('data', function (data) {
term.term.write(data);
});
Monitor.socket.on('error', function (data) {
alert(data);
});
});
} }
......
...@@ -15,7 +15,7 @@ export class MonitorPageComponent implements OnInit { ...@@ -15,7 +15,7 @@ export class MonitorPageComponent implements OnInit {
ngOnInit() { ngOnInit() {
this.activatedRoute.params.subscribe((params: Params) => { this.activatedRoute.params.subscribe((params: Params) => {
Monitor.sessionid = params['token']; Monitor.token = params['token'];
Monitor.type = 'term'; Monitor.type = 'term';
console.log(Monitor); console.log(Monitor);
}); });
......
<p> <app-element-term
term-page works! [token]="token"
</p> [index]="0">
</app-element-term>
import { Component, OnInit } from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {DataStore} from '../globals';
import {ActivatedRoute, Params} from '@angular/router';
import * as jQuery from 'jquery/dist/jquery.min.js';
@Component({ @Component({
selector: 'app-term-page', selector: 'app-term-page',
...@@ -6,10 +9,16 @@ import { Component, OnInit } from '@angular/core'; ...@@ -6,10 +9,16 @@ import { Component, OnInit } from '@angular/core';
styleUrls: ['./term-page.component.scss'] styleUrls: ['./term-page.component.scss']
}) })
export class TermPageComponent implements OnInit { export class TermPageComponent implements OnInit {
token: string;
constructor() { } constructor(private activatedRoute: ActivatedRoute) {
DataStore.NavShow = false;
}
ngOnInit() { ngOnInit() {
this.activatedRoute.params.subscribe((params: Params) => {
this.token = params['token'];
});
jQuery('body').css('background-color', 'black');
} }
} }
<h2 mat-dialog-title>Delete all</h2>
<mat-dialog-content>Are you sure?</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-dialog-close>No</button>
<!-- The mat-dialog-close directive optionally accepts a value as a result for the dialog. -->
<button mat-button [mat-dialog-close]="true">Yes</button>
</mat-dialog-actions>
<p> <mat-checkbox>Check me!</mat-checkbox>
test-page works! <button mat-raised-button (click)="openDialog()">Pick one</button>
</p>
<!--<ngx-layer></ngx-layer>-->
import { Component, OnInit } from '@angular/core'; import {Component, Inject, OnInit} from '@angular/core';
import {DataStore} from '../globals';
import {DialogService} from '../elements/dialog/dialog.service';
import {MAT_DIALOG_DATA, MatDialog, MatDialogRef} from '@angular/material';
// import {Mats, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material';
@Component({ @Component({
selector: 'app-test-page', selector: 'app-test-page',
...@@ -6,10 +11,41 @@ import { Component, OnInit } from '@angular/core'; ...@@ -6,10 +11,41 @@ import { Component, OnInit } from '@angular/core';
styleUrls: ['./test-page.component.scss'] styleUrls: ['./test-page.component.scss']
}) })
export class TestPageComponent implements OnInit { export class TestPageComponent implements OnInit {
name: string;
constructor() { } constructor(private _dialog: MatDialog) {
DataStore.NavShow = false;
}
ngOnInit() { ngOnInit() {
this.name = 'ssss';
}
openDialog(): void {
const dialogRef = this._dialog.open(TestPageComponentDialog, {
width: '251px',
data: {name: this.name}
});
dialogRef.afterClosed().subscribe(result => {
console.log('The dialog was closed', result);
// this.animal = result;
});
}
}
@Component({
selector: 'app-test-page-dialog',
templateUrl: 'dialog.html',
})
export class TestPageComponentDialog {
constructor(public dialogRef: MatDialogRef<TestPageComponentDialog>,
@Inject(MAT_DIALOG_DATA) public data: any) {
}
onNoClick(): void {
this.dialogRef.close();
} }
} }
...@@ -66,3 +66,7 @@ $asset-path: '../static/imgs/inspinia'; ...@@ -66,3 +66,7 @@ $asset-path: '../static/imgs/inspinia';
margin: 0; margin: 0;
} }
} }
@import '~@angular/material/prebuilt-themes/deeppurple-amber.css';
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
font-size: large; font-size: large;
} }
html, html,
body { body {
overflow-x: hidden; /* Prevent scroll on narrow devices */ overflow-x: hidden; /* Prevent scroll on narrow devices */
......
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