Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
L
luna
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
luna
Commits
f0ea0559
Commit
f0ea0559
authored
7 years ago
by
zheng liu
Browse files
Options
Browse Files
Download
Plain Diff
Merged in master (pull request #59)
Master
parents
ae90036c
b9e79367
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
133 additions
and
24 deletions
+133
-24
cn.json
i18n/cn.json
+7
-1
nginx.conf
nginx.conf
+0
-4
dialog.html
src/app/ControlPage/cleftbar/dialog.html
+5
-5
control.component.html
src/app/ControlPage/control/control.component.html
+2
-2
app-routing.module.ts
src/app/app-routing.module.ts
+1
-1
app.module.ts
src/app/app.module.ts
+2
-0
guacamole.component.html
src/app/elements/guacamole/guacamole.component.html
+1
-0
guacamole.component.scss
src/app/elements/guacamole/guacamole.component.scss
+6
-0
guacamole.component.spec.ts
src/app/elements/guacamole/guacamole.component.spec.ts
+25
-0
guacamole.component.ts
src/app/elements/guacamole/guacamole.component.ts
+58
-0
iframe.component.ts
src/app/elements/iframe/iframe.component.ts
+23
-11
globals.ts
src/app/globals.ts
+2
-0
build.sh
tools/build.sh
+1
-0
No files found.
i18n/cn.json
View file @
f0ea0559
...
...
@@ -40,5 +40,11 @@
"user"
:
"用户"
,
"user group"
:
"用户组"
,
"login logs"
:
"登陆日志"
,
"language"
:
"语言选择"
"language"
:
"语言选择"
,
"found"
:
"发现"
,
"users "
:
"用户"
,
"choose a user"
:
"选择一个用户"
,
"please choose a user"
:
"请选择一个用户"
,
"cancel"
:
"取消"
,
"confirm"
:
"确认"
}
This diff is collapsed.
Click to expand it.
nginx.conf
View file @
f0ea0559
...
...
@@ -5,8 +5,4 @@ server {
try_files
$uri
/
/index.html
;
alias
/opt/luna/
;
}
location
/i18n/
{
root
/opt/luna/i18n
;
}
}
This diff is collapsed.
Click to expand it.
src/app/ControlPage/cleftbar/dialog.html
View file @
f0ea0559
<h1
mat-dialog-title
>
Found {{data.users.length}} Users
</h1>
<h1
mat-dialog-title
>
{{"Found"|trans}} {{data.users.length}} {{"Users "|trans}}
</h1>
<mat-form-field>
<mat-select
[(
value
)]="
selected
"
[
compareWith
]="
compareFn
"
[
formControl
]="
UserSelectControl
"
placeholder=
"
Choose a User
"
required
>
placeholder=
"
{{'Choose a User'|trans}}
"
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-error
*
ngIf=
"UserSelectControl.hasError('required')"
>
{{"Please choose a User"|trans}}
</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>
<button
mat-raised-button
(
click
)="
onNoClick
()"
>
{{"Cancel"|trans}}
</button>
<button
mat-raised-button
color=
"primary"
[
mat-dialog-close
]="
selected
"
cdkFocusInitial
>
{{"Confirm"|trans}}
</button>
</div>
This diff is collapsed.
Click to expand it.
src/app/ControlPage/control/control.component.html
View file @
f0ea0559
...
...
@@ -7,9 +7,9 @@
[
index
]="
i
"
*
ngIf=
"m.type=='ssh'"
>
</app-element-term>
<app-element-
ifram
e
[
host
]="
m
.
host
"
<app-element-
guacamol
e
[
host
]="
m
.
host
"
[
userid
]="
m
.
user
.
id
"
[
index
]="
i
"
*
ngIf=
"m.type=='rdp'"
>
</app-element-
ifram
e>
</app-element-
guacamol
e>
</div>
This diff is collapsed.
Click to expand it.
src/app/app-routing.module.ts
View file @
f0ea0559
...
...
@@ -28,7 +28,7 @@ const appRoutes: Routes = [
{
path
:
'replay/:token'
,
component
:
ReplayPageComponent
},
{
path
:
'monitor/:token'
,
component
:
MonitorPageComponent
},
{
path
:
'test'
,
component
:
TestPageComponent
},
{
path
:
'setting'
,
component
:
SettingPageComponent
},
//
{path: 'setting', component: SettingPageComponent},
{
path
:
'undefined'
,
component
:
BlankPageComponent
},
{
path
:
''
,
component
:
ControlPageComponent
},
{
path
:
'**'
,
component
:
NotFoundComponent
}
...
...
This diff is collapsed.
Click to expand it.
src/app/app.module.ts
View file @
f0ea0559
...
...
@@ -65,6 +65,7 @@ import {SettingPageTerminalComponent} from './setting-page/terminal/terminal.com
import
{
SettingPageS3Component
}
from
'./setting-page/s3/s3.component'
;
import
{
TransPipe
}
from
'./trans.pipe'
;
import
{
MAT_LABEL_GLOBAL_OPTIONS
}
from
'@angular/material'
;
import
{
ElementGuacamoleComponent
}
from
'./elements/guacamole/guacamole.component'
;
@
NgModule
({
imports
:
[
...
...
@@ -93,6 +94,7 @@ import {MAT_LABEL_GLOBAL_OPTIONS} from '@angular/material';
ElementTableComponent
,
ElementLeftbarComponent
,
ElementOfooterComponent
,
ElementGuacamoleComponent
,
LoginComponent
,
SearchComponent
,
SearchFilter
,
...
...
This diff is collapsed.
Click to expand it.
src/app/elements/guacamole/guacamole.component.html
0 → 100644
View file @
f0ea0559
<iframe
[
src
]="
trust
(
target
)"
></iframe>
This diff is collapsed.
Click to expand it.
src/app/elements/guacamole/guacamole.component.scss
0 → 100644
View file @
f0ea0559
iframe
{
width
:
100%
;
height
:
100%
;
border
:
none
;
background-color
:
white
;
}
This diff is collapsed.
Click to expand it.
src/app/elements/guacamole/guacamole.component.spec.ts
0 → 100644
View file @
f0ea0559
import
{
async
,
ComponentFixture
,
TestBed
}
from
'@angular/core/testing'
;
import
{
ElementGuacamoleComponent
}
from
'./guacamole.component'
;
describe
(
'ElementGuacamoleComponent'
,
()
=>
{
let
component
:
ElementGuacamoleComponent
;
let
fixture
:
ComponentFixture
<
ElementGuacamoleComponent
>
;
beforeEach
(
async
(()
=>
{
TestBed
.
configureTestingModule
({
declarations
:
[
ElementGuacamoleComponent
]
})
.
compileComponents
();
}));
beforeEach
(()
=>
{
fixture
=
TestBed
.
createComponent
(
ElementGuacamoleComponent
);
component
=
fixture
.
componentInstance
;
fixture
.
detectChanges
();
});
it
(
'should create'
,
()
=>
{
expect
(
component
).
toBeTruthy
();
});
});
This diff is collapsed.
Click to expand it.
src/app/elements/guacamole/guacamole.component.ts
0 → 100644
View file @
f0ea0559
import
{
Component
,
Input
,
OnInit
}
from
'@angular/core'
;
import
{
CookieService
}
from
'ngx-cookie-service'
;
import
{
HttpService
,
LogService
}
from
'../../app.service'
;
import
{
DataStore
,
User
}
from
'../../globals'
;
import
{
DomSanitizer
}
from
'@angular/platform-browser'
;
import
{
environment
}
from
'../../../environments/environment'
;
import
{
NavList
}
from
'../../ControlPage/control/control.component'
;
@
Component
({
selector
:
'app-element-guacamole'
,
templateUrl
:
'./guacamole.component.html'
,
styleUrls
:
[
'./guacamole.component.scss'
]
})
export
class
ElementGuacamoleComponent
implements
OnInit
{
@
Input
()
host
:
any
;
@
Input
()
userid
:
any
;
@
Input
()
index
:
number
;
target
:
string
;
constructor
(
private
sanitizer
:
DomSanitizer
,
private
_http
:
HttpService
,
private
_cookie
:
CookieService
,
private
_logger
:
LogService
)
{
}
ngOnInit
()
{
// /guacamole/api/tokens will redirect to http://guacamole/api/tokens
const
base
=
window
.
btoa
(
this
.
host
.
id
+
'
\
0'
+
'c'
+
'
\
0'
+
'jumpserver'
);
if
(
environment
.
production
)
{
if
(
DataStore
.
guacamole_token
)
{
this
.
target
=
document
.
location
.
origin
+
'/guacamole/#/client/'
+
base
+
'?token='
+
DataStore
.
guacamole_token
;
}
else
{
this
.
_http
.
get_guacamole_token
(
User
.
name
,
this
.
host
.
id
,
this
.
userid
).
subscribe
(
data
=>
{
// /guacamole/client will redirect to http://guacamole/#/client
this
.
target
=
document
.
location
.
origin
+
'/guacamole/#/client/'
+
base
+
'?token='
+
data
[
'authToken'
];
DataStore
.
guacamole_token
=
data
[
'authToken'
];
},
error2
=>
{
this
.
_logger
.
error
(
error2
);
}
);
}
}
else
{
this
.
target
=
this
.
_cookie
.
get
(
'guacamole'
);
}
}
trust
(
url
)
{
return
this
.
sanitizer
.
bypassSecurityTrustResourceUrl
(
url
);
}
Disconnect
()
{
NavList
.
List
[
this
.
index
].
connected
=
false
;
}
}
This diff is collapsed.
Click to expand it.
src/app/elements/iframe/iframe.component.ts
View file @
f0ea0559
...
...
@@ -2,8 +2,10 @@ import {Component, Input, OnInit} from '@angular/core';
import
{
DomSanitizer
}
from
'@angular/platform-browser'
;
import
{
NavList
}
from
'../../ControlPage/control/control.component'
;
import
{
User
}
from
'../../globals'
;
import
{
User
,
DataStore
}
from
'../../globals'
;
import
{
HttpService
,
LogService
}
from
'../../app.service'
;
import
{
environment
}
from
'../../../environments/environment'
;
import
{
CookieService
}
from
'ngx-cookie-service'
;
@
Component
({
selector
:
'app-element-iframe'
,
...
...
@@ -18,22 +20,32 @@ export class ElementIframeComponent implements OnInit {
constructor
(
private
sanitizer
:
DomSanitizer
,
private
_http
:
HttpService
,
private
_cookie
:
CookieService
,
private
_logger
:
LogService
)
{
}
ngOnInit
()
{
// /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
);
const
base
=
window
.
btoa
(
this
.
host
.
id
+
'
\
0'
+
'c'
+
'
\
0'
+
'jumpserver'
);
if
(
environment
.
production
)
{
if
(
DataStore
.
guacamole_token
)
{
this
.
target
=
document
.
location
.
origin
+
'/guacamole/#/client/'
+
base
+
'?token='
+
DataStore
.
guacamole_token
;
}
else
{
this
.
_http
.
get_guacamole_token
(
User
.
name
,
this
.
host
.
id
,
this
.
userid
).
subscribe
(
data
=>
{
// /guacamole/client will redirect to http://guacamole/#/client
this
.
target
=
document
.
location
.
origin
+
'/guacamole/#/client/'
+
base
+
'?token='
+
data
[
'authToken'
];
DataStore
.
guacamole_token
=
data
[
'authToken'
];
},
error2
=>
{
this
.
_logger
.
error
(
error2
);
}
);
}
);
}
else
{
this
.
target
=
this
.
_cookie
.
get
(
'guacamole'
);
}
}
trust
(
url
)
{
...
...
This diff is collapsed.
Click to expand it.
src/app/globals.ts
View file @
f0ea0559
...
...
@@ -104,6 +104,7 @@ export let DataStore: {
leftbarshow
:
boolean
;
windowsize
:
Array
<
number
>
;
autologin
:
boolean
;
guacamole_token
:
string
;
}
=
{
socket
:
io
.
connect
(),
Nav
:
[{}],
...
...
@@ -115,6 +116,7 @@ export let DataStore: {
leftbarshow
:
true
,
windowsize
:
[],
autologin
:
false
,
guacamole_token
:
''
};
export
let
CSRF
=
''
;
...
...
This diff is collapsed.
Click to expand it.
tools/build.sh
View file @
f0ea0559
...
...
@@ -6,5 +6,6 @@ npm run-script build
rm
-fr
luna
*
mv
dist luna
cp
-R
i18n/ luna/
tar
czf luna.tar.gz luna
md5 luna.tar.gz
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment