Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
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
jumpserver
Commits
f1c38671
Commit
f1c38671
authored
Feb 25, 2018
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update]一些修改
parent
f0dd7d54
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
56 additions
and
20 deletions
+56
-20
asset.py
apps/assets/api/asset.py
+2
-1
asset.py
apps/assets/forms/asset.py
+19
-8
node.py
apps/assets/models/node.py
+8
-2
node.py
apps/assets/serializers/node.py
+6
-1
admin_user_list.html
apps/assets/templates/assets/admin_user_list.html
+2
-1
asset_list.html
apps/assets/templates/assets/asset_list.html
+1
-1
system_user_list.html
apps/assets/templates/assets/system_user_list.html
+2
-1
asset.py
apps/assets/views/asset.py
+1
-0
asset_permission_list.html
apps/perms/templates/perms/asset_permission_list.html
+1
-1
_message.html
apps/templates/_message.html
+11
-3
api.py
apps/terminal/api.py
+1
-1
api_urls.py
apps/terminal/urls/api_urls.py
+2
-0
No files found.
apps/assets/api/asset.py
View file @
f1c38671
...
...
@@ -49,7 +49,8 @@ class AssetViewSet(IDInFilterMixin, LabelFilter, BulkModelViewSet):
queryset
=
queryset
.
filter
(
admin_user
=
admin_user
)
if
node_id
:
node
=
get_object_or_404
(
Node
,
id
=
node_id
)
queryset
=
queryset
.
filter
(
nodes__key__startswith
=
node
.
key
)
.
distinct
()
if
not
node
.
is_root
():
queryset
=
queryset
.
filter
(
nodes__key__startswith
=
node
.
key
)
.
distinct
()
return
queryset
...
...
apps/assets/forms/asset.py
View file @
f1c38671
...
...
@@ -3,7 +3,7 @@
from
django
import
forms
from
django.utils.translation
import
gettext_lazy
as
_
from
..models
import
Asset
from
..models
import
Asset
,
AdminUser
from
common.utils
import
get_logger
logger
=
get_logger
(
__file__
)
...
...
@@ -85,16 +85,23 @@ class AssetBulkUpdateForm(forms.ModelForm):
port
=
forms
.
IntegerField
(
label
=
_
(
'Port'
),
required
=
False
,
min_value
=
1
,
max_value
=
65535
,
)
admin_user
=
forms
.
ModelChoiceField
(
required
=
False
,
queryset
=
AdminUser
.
objects
.
all
(),
label
=
_
(
"Admin user"
),
widget
=
forms
.
Select
(
attrs
=
{
'class'
:
'select2'
,
'data-placeholder'
:
_
(
'Admin user'
)
}
)
)
class
Meta
:
model
=
Asset
fields
=
[
'assets'
,
'port'
,
'admin_user'
,
'nodes'
,
'assets'
,
'port'
,
'admin_user'
,
'
labels'
,
'
nodes'
,
]
widgets
=
{
'admin_user'
:
forms
.
SelectMultiple
(
attrs
=
{
'class'
:
'select2'
,
'data-placeholder'
:
_
(
'Admin user'
)}
),
'labels'
:
forms
.
SelectMultiple
(
attrs
=
{
'class'
:
'select2'
,
'data-placeholder'
:
_
(
'Labels'
)}
),
...
...
@@ -106,17 +113,21 @@ class AssetBulkUpdateForm(forms.ModelForm):
def
save
(
self
,
commit
=
True
):
changed_fields
=
[]
for
field
in
self
.
_meta
.
fields
:
if
self
.
data
.
get
(
field
)
is
not
None
:
if
self
.
data
.
get
(
field
)
not
in
[
None
,
''
]
:
changed_fields
.
append
(
field
)
cleaned_data
=
{
k
:
v
for
k
,
v
in
self
.
cleaned_data
.
items
()
if
k
in
changed_fields
}
assets
=
cleaned_data
.
pop
(
'assets'
)
labels
=
cleaned_data
.
pop
(
'labels'
,
[])
nodes
=
cleaned_data
.
pop
(
'nodes'
)
assets
=
Asset
.
objects
.
filter
(
id__in
=
[
asset
.
id
for
asset
in
assets
])
assets
.
update
(
**
cleaned_data
)
if
labels
:
for
asset
in
assets
:
asset
.
labels
.
set
(
labels
)
for
label
in
labels
:
label
.
assets
.
add
(
*
tuple
(
assets
))
if
nodes
:
for
node
in
nodes
:
node
.
assets
.
add
(
*
tuple
(
assets
))
return
assets
apps/assets/models/node.py
View file @
f1c38671
...
...
@@ -63,10 +63,16 @@ class Node(models.Model):
def
get_all_assets
(
self
):
from
.asset
import
Asset
nodes
=
self
.
get_family
()
assets
=
Asset
.
objects
.
filter
(
nodes__in
=
nodes
)
if
self
.
is_root
():
assets
=
Asset
.
objects
.
all
()
else
:
nodes
=
self
.
get_family
()
assets
=
Asset
.
objects
.
filter
(
nodes__in
=
nodes
)
return
assets
def
is_root
(
self
):
return
self
.
key
==
'0'
@property
def
parent
(
self
):
if
self
.
key
==
"0"
:
...
...
apps/assets/serializers/node.py
View file @
f1c38671
...
...
@@ -38,16 +38,21 @@ class NodeGrantedSerializer(BulkSerializerMixin, serializers.ModelSerializer):
class
NodeSerializer
(
serializers
.
ModelSerializer
):
parent
=
serializers
.
SerializerMethodField
()
assets_amount
=
serializers
.
SerializerMethodField
()
class
Meta
:
model
=
Node
fields
=
[
'id'
,
'key'
,
'value'
,
'parent'
]
fields
=
[
'id'
,
'key'
,
'value'
,
'parent'
,
'assets_amount'
]
list_serializer_class
=
BulkListSerializer
@staticmethod
def
get_parent
(
obj
):
return
obj
.
parent
.
id
@staticmethod
def
get_assets_amount
(
obj
):
return
obj
.
get_all_assets
()
.
count
()
def
get_fields
(
self
):
fields
=
super
()
.
get_fields
()
field
=
fields
[
"key"
]
...
...
apps/assets/templates/assets/admin_user_list.html
View file @
f1c38671
...
...
@@ -74,7 +74,8 @@ $(document).ready(function(){
if
(
val
===
100
)
{
innerHtml
=
"<span class='text-navy'>"
+
val
+
"% </span>"
;
}
else
{
innerHtml
=
"<span class='text-danger'>"
+
val
+
"% </span>"
;
var
num
=
new
Number
(
val
);
innerHtml
=
"<span class='text-danger'>"
+
num
.
toFixed
(
1
)
+
"% </span>"
;
}
$
(
td
).
html
(
'<span href="javascript:void(0);" data-toggle="tooltip" title="'
+
cellData
+
'">'
+
innerHtml
+
'</span>'
);
...
...
apps/assets/templates/assets/asset_list.html
View file @
f1c38671
...
...
@@ -329,7 +329,7 @@ function initTree() {
{
#
if
(
value
[
"key"
]
===
"0"
)
{
#
}
value
[
"open"
]
=
true
;
{
#
}
#
}
value
[
"name"
]
=
value
[
"value"
]
value
[
"name"
]
=
value
[
"value"
]
+
' ('
+
value
[
'assets_amount'
]
+
')'
});
zNodes
=
data
;
$
.
fn
.
zTree
.
init
(
$
(
"#assetTree"
),
setting
,
zNodes
);
...
...
apps/assets/templates/assets/system_user_list.html
View file @
f1c38671
...
...
@@ -75,7 +75,8 @@ function initTable() {
if
(
val
===
100
)
{
innerHtml
=
"<span class='text-navy'>"
+
val
+
"% </span>"
;
}
else
{
innerHtml
=
"<span class='text-danger'>"
+
val
+
"% </span>"
;
var
num
=
new
Number
(
val
);
innerHtml
=
"<span class='text-danger'>"
+
num
.
toFixed
(
1
)
+
"% </span>"
;
}
$
(
td
).
html
(
'<span href="javascript:void(0);" data-toggle="tooltip" title="'
+
cellData
+
'">'
+
innerHtml
+
'</span>'
);
...
...
apps/assets/views/asset.py
View file @
f1c38671
...
...
@@ -43,6 +43,7 @@ class AssetListView(AdminUserRequiredMixin, TemplateView):
template_name
=
'assets/asset_list.html'
def
get_context_data
(
self
,
**
kwargs
):
Node
.
root
()
context
=
{
'app'
:
_
(
'Assets'
),
'action'
:
_
(
'Asset list'
),
...
...
apps/perms/templates/perms/asset_permission_list.html
View file @
f1c38671
...
...
@@ -181,7 +181,7 @@ function initTree() {
{
#
if
(
value
[
"key"
]
===
"0"
)
{
#
}
value
[
"open"
]
=
true
;
{
#
}
#
}
value
[
"name"
]
=
value
[
"value"
]
value
[
"name"
]
=
value
[
"value"
]
+
' ('
+
value
[
'assets_amount'
]
+
')'
});
zNodes
=
data
;
$
.
fn
.
zTree
.
init
(
$
(
"#assetTree"
),
setting
,
zNodes
);
...
...
apps/templates/_message.html
View file @
f1c38671
{% load i18n %}
{% block first_login_message %}
{% if request.user.is_authenticated and request.user.is_first_login %}
<div
class=
"alert alert-danger help-message"
>
<div
class=
"alert alert-danger help-message
alert-dismissable
"
>
{% url 'users:user-first-login' as first_login_url %}
{% blocktrans %}
Your information was incomplete. Please click
<a
href=
"{{ first_login_url }}"
>
this link
</a>
to complete your information.
...
...
@@ -10,8 +10,9 @@
{% endif %}
{% endblock %}
{% block update_public_key_message %}
{% if request.user.is_authenticated and not request.user.is_public_key_valid %}
<div
class=
"alert alert-danger help-message"
>
{% if request.user.is_authenticated and not request.user.is_public_key_valid and not request.COOKIE.close_public_key_msg != '1' %}
<div
class=
"alert alert-danger help-message alert-dismissable"
>
<button
aria-hidden=
"true"
data-dismiss=
"alert"
class=
"close"
type=
"button"
onclick=
"closePublicKeyMsg()"
>
×
</button>
{% url 'users:user-pubkey-update' as user_pubkey_update %}
{% blocktrans %}
Your ssh public key not set or expired. Please click
<a
href=
"{{ user_pubkey_update }}"
>
this link
</a>
to update
...
...
@@ -27,3 +28,9 @@
</div>
{% endfor %}
{% endif %}
<script>
function
closePublicKeyMsg
()
{
setCookie
(
'close_public_key_msg'
,
1
)
}
</script>
\ No newline at end of file
apps/terminal/api.py
View file @
f1c38671
...
...
@@ -174,7 +174,7 @@ class SessionViewSet(viewsets.ModelViewSet):
terminal_id
=
self
.
kwargs
.
get
(
"terminal"
,
None
)
if
terminal_id
:
terminal
=
get_object_or_404
(
Terminal
,
id
=
terminal_id
)
self
.
queryset
=
terminal
.
s
tatus
_set
.
all
()
self
.
queryset
=
terminal
.
s
ession
_set
.
all
()
return
self
.
queryset
...
...
apps/terminal/urls/api_urls.py
View file @
f1c38671
...
...
@@ -15,6 +15,8 @@ router.register(r'v1/terminal/(?P<terminal>[a-zA-Z0-9\-]{36})?/?sessions', api.S
router
.
register
(
r'v1/tasks'
,
api
.
TaskViewSet
,
'tasks'
)
router
.
register
(
r'v1/terminal'
,
api
.
TerminalViewSet
,
'terminal'
)
router
.
register
(
r'v1/command'
,
api
.
CommandViewSet
,
'command'
)
router
.
register
(
r'v1/sessions'
,
api
.
SessionViewSet
,
'session'
)
router
.
register
(
r'v1/status'
,
api
.
StatusViewSet
,
'session'
)
urlpatterns
=
[
url
(
r'^v1/sessions/(?P<pk>[0-9a-zA-Z\-]{36})/replay/$'
,
...
...
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