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
09fbd3a5
Unverified
Commit
09fbd3a5
authored
Oct 16, 2018
by
老广
Committed by
GitHub
Oct 16, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1922 from jumpserver/dev
Dev
parents
0665644f
ebecd005
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
521 additions
and
163 deletions
+521
-163
asset.py
apps/assets/api/asset.py
+1
-1
cmd_filter.py
apps/assets/api/cmd_filter.py
+2
-2
user.py
apps/assets/forms/user.py
+1
-1
asset.py
apps/assets/models/asset.py
+2
-1
cmd_filter.py
apps/assets/models/cmd_filter.py
+2
-2
node.py
apps/assets/models/node.py
+10
-5
user.py
apps/assets/models/user.py
+4
-2
asset_detail.html
apps/assets/templates/assets/asset_detail.html
+4
-0
cmd_filter_list.html
apps/assets/templates/assets/cmd_filter_list.html
+1
-1
asset.py
apps/assets/views/asset.py
+1
-4
forms.py
apps/common/forms.py
+3
-0
common_tags.py
apps/common/templatetags/common_tags.py
+5
-0
django.mo
apps/locale/zh/LC_MESSAGES/django.mo
+0
-0
django.po
apps/locale/zh/LC_MESSAGES/django.po
+456
-139
mixins.py
apps/orgs/mixins.py
+0
-1
api.py
apps/perms/api.py
+1
-1
jumpserver.js
apps/static/js/jumpserver.js
+8
-1
_nav.html
apps/templates/_nav.html
+11
-1
_nav_user.html
apps/templates/_nav_user.html
+7
-1
requirements.txt
requirements/requirements.txt
+2
-0
No files found.
apps/assets/api/asset.py
View file @
09fbd3a5
...
@@ -74,7 +74,7 @@ class AssetViewSet(IDInFilterMixin, LabelFilter, BulkModelViewSet):
...
@@ -74,7 +74,7 @@ class AssetViewSet(IDInFilterMixin, LabelFilter, BulkModelViewSet):
.
select_related
(
'admin_user'
)
.
select_related
(
'admin_user'
)
self
.
filter_admin_user_id
()
self
.
filter_admin_user_id
()
self
.
filter_node
()
self
.
filter_node
()
return
self
.
queryset
return
self
.
queryset
.
distinct
()
class
AssetListUpdateApi
(
IDInFilterMixin
,
ListBulkCreateUpdateDestroyAPIView
):
class
AssetListUpdateApi
(
IDInFilterMixin
,
ListBulkCreateUpdateDestroyAPIView
):
...
...
apps/assets/api/cmd_filter.py
View file @
09fbd3a5
...
@@ -26,7 +26,7 @@ class CommandFilterRuleViewSet(BulkModelViewSet):
...
@@ -26,7 +26,7 @@ class CommandFilterRuleViewSet(BulkModelViewSet):
fpk
=
self
.
kwargs
.
get
(
'filter_pk'
)
fpk
=
self
.
kwargs
.
get
(
'filter_pk'
)
if
not
fpk
:
if
not
fpk
:
return
CommandFilterRule
.
objects
.
none
()
return
CommandFilterRule
.
objects
.
none
()
group
=
get_object_or_404
(
CommandFilter
,
pk
=
fpk
)
cmd_filter
=
get_object_or_404
(
CommandFilter
,
pk
=
fpk
)
return
group
.
rules
.
all
()
.
order_by
(
'priority'
)
return
cmd_filter
.
rules
.
all
(
)
apps/assets/forms/user.py
View file @
09fbd3a5
...
@@ -150,7 +150,7 @@ class SystemUserForm(OrgModelForm, PasswordAndKeyAuthForm):
...
@@ -150,7 +150,7 @@ class SystemUserForm(OrgModelForm, PasswordAndKeyAuthForm):
'name'
:
'* required'
,
'name'
:
'* required'
,
'username'
:
'* required'
,
'username'
:
'* required'
,
'auto_push'
:
_
(
'Auto push system user to asset'
),
'auto_push'
:
_
(
'Auto push system user to asset'
),
'priority'
:
_
(
'High level will be using login asset as default, '
'priority'
:
_
(
'
1-100,
High level will be using login asset as default, '
'if user was granted more than 2 system user'
),
'if user was granted more than 2 system user'
),
'login_mode'
:
_
(
'If you choose manual login mode, you do not '
'login_mode'
:
_
(
'If you choose manual login mode, you do not '
'need to fill in the username and password.'
)
'need to fill in the username and password.'
)
...
...
apps/assets/models/asset.py
View file @
09fbd3a5
...
@@ -34,7 +34,8 @@ def default_cluster():
...
@@ -34,7 +34,8 @@ def default_cluster():
def
default_node
():
def
default_node
():
try
:
try
:
from
.node
import
Node
from
.node
import
Node
return
Node
.
root
()
root
=
Node
.
root
()
return
root
except
:
except
:
return
None
return
None
...
...
apps/assets/models/cmd_filter.py
View file @
09fbd3a5
...
@@ -44,7 +44,7 @@ class CommandFilterRule(OrgModelMixin):
...
@@ -44,7 +44,7 @@ class CommandFilterRule(OrgModelMixin):
id
=
models
.
UUIDField
(
default
=
uuid
.
uuid4
,
primary_key
=
True
)
id
=
models
.
UUIDField
(
default
=
uuid
.
uuid4
,
primary_key
=
True
)
filter
=
models
.
ForeignKey
(
'CommandFilter'
,
on_delete
=
models
.
CASCADE
,
verbose_name
=
_
(
"Filter"
),
related_name
=
'rules'
)
filter
=
models
.
ForeignKey
(
'CommandFilter'
,
on_delete
=
models
.
CASCADE
,
verbose_name
=
_
(
"Filter"
),
related_name
=
'rules'
)
type
=
models
.
CharField
(
max_length
=
16
,
default
=
TYPE_COMMAND
,
choices
=
TYPE_CHOICES
,
verbose_name
=
_
(
"Type"
))
type
=
models
.
CharField
(
max_length
=
16
,
default
=
TYPE_COMMAND
,
choices
=
TYPE_CHOICES
,
verbose_name
=
_
(
"Type"
))
priority
=
models
.
IntegerField
(
default
=
50
,
verbose_name
=
_
(
"Priority"
),
help_text
=
_
(
"1-100, the
low
er will be match first"
),
priority
=
models
.
IntegerField
(
default
=
50
,
verbose_name
=
_
(
"Priority"
),
help_text
=
_
(
"1-100, the
high
er will be match first"
),
validators
=
[
MinValueValidator
(
1
),
MaxValueValidator
(
100
)])
validators
=
[
MinValueValidator
(
1
),
MaxValueValidator
(
100
)])
content
=
models
.
TextField
(
max_length
=
1024
,
verbose_name
=
_
(
"Content"
),
help_text
=
_
(
"One line one command"
))
content
=
models
.
TextField
(
max_length
=
1024
,
verbose_name
=
_
(
"Content"
),
help_text
=
_
(
"One line one command"
))
action
=
models
.
IntegerField
(
default
=
ACTION_DENY
,
choices
=
ACTION_CHOICES
,
verbose_name
=
_
(
"Action"
))
action
=
models
.
IntegerField
(
default
=
ACTION_DENY
,
choices
=
ACTION_CHOICES
,
verbose_name
=
_
(
"Action"
))
...
@@ -54,7 +54,7 @@ class CommandFilterRule(OrgModelMixin):
...
@@ -54,7 +54,7 @@ class CommandFilterRule(OrgModelMixin):
created_by
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
default
=
''
,
verbose_name
=
_
(
'Created by'
))
created_by
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
default
=
''
,
verbose_name
=
_
(
'Created by'
))
class
Meta
:
class
Meta
:
ordering
=
(
'priority'
,
'action'
)
ordering
=
(
'
-
priority'
,
'action'
)
def
__str__
(
self
):
def
__str__
(
self
):
return
'{}
%
{}'
.
format
(
self
.
type
,
self
.
content
)
return
'{}
%
{}'
.
format
(
self
.
type
,
self
.
content
)
apps/assets/models/node.py
View file @
09fbd3a5
...
@@ -31,6 +31,8 @@ class Node(OrgModelMixin):
...
@@ -31,6 +31,8 @@ class Node(OrgModelMixin):
return
self
.
full_value
return
self
.
full_value
def
__eq__
(
self
,
other
):
def
__eq__
(
self
,
other
):
if
not
other
:
return
False
return
self
.
key
==
other
.
key
return
self
.
key
==
other
.
key
def
__gt__
(
self
,
other
):
def
__gt__
(
self
,
other
):
...
@@ -136,7 +138,7 @@ class Node(OrgModelMixin):
...
@@ -136,7 +138,7 @@ class Node(OrgModelMixin):
args
.
append
(
Q
(
nodes__key__regex
=
pattern
)
|
Q
(
nodes
=
None
))
args
.
append
(
Q
(
nodes__key__regex
=
pattern
)
|
Q
(
nodes
=
None
))
else
:
else
:
kwargs
[
'nodes__key__regex'
]
=
pattern
kwargs
[
'nodes__key__regex'
]
=
pattern
assets
=
Asset
.
objects
.
filter
(
*
args
,
**
kwargs
)
assets
=
Asset
.
objects
.
filter
(
*
args
,
**
kwargs
)
.
distinct
()
return
assets
return
assets
def
get_all_valid_assets
(
self
):
def
get_all_valid_assets
(
self
):
...
@@ -201,13 +203,16 @@ class Node(OrgModelMixin):
...
@@ -201,13 +203,16 @@ class Node(OrgModelMixin):
# 如果使用current_org 在set_current_org时会死循环
# 如果使用current_org 在set_current_org时会死循环
_current_org
=
get_current_org
()
_current_org
=
get_current_org
()
with
transaction
.
atomic
():
with
transaction
.
atomic
():
if
_current_org
.
is_
defaul
t
():
if
_current_org
.
is_
roo
t
():
key
=
'0'
key
=
'0'
elif
_current_org
.
is_default
():
key
=
'1'
else
:
else
:
set_current_org
(
Organization
.
root
())
set_current_org
(
Organization
.
root
())
org_nodes_roots
=
cls
.
objects
.
filter
(
key__regex
=
r'^[0-9]+$'
)
org_nodes_roots
=
cls
.
objects
.
filter
(
key__regex
=
r'^[0-9]+$'
)
org_nodes_roots_keys
=
org_nodes_roots
.
values_list
(
'key'
,
flat
=
True
)
or
[
0
]
org_nodes_roots_keys
=
org_nodes_roots
.
values_list
(
'key'
,
flat
=
True
)
or
[
'1'
]
key
=
str
(
max
([
int
(
k
)
for
k
in
org_nodes_roots_keys
])
+
1
)
key
=
max
([
int
(
k
)
for
k
in
org_nodes_roots_keys
])
key
=
str
(
key
+
1
)
if
key
!=
0
else
'2'
set_current_org
(
_current_org
)
set_current_org
(
_current_org
)
root
=
cls
.
objects
.
create
(
key
=
key
,
value
=
_current_org
.
name
)
root
=
cls
.
objects
.
create
(
key
=
key
,
value
=
_current_org
.
name
)
return
root
return
root
...
@@ -223,7 +228,7 @@ class Node(OrgModelMixin):
...
@@ -223,7 +228,7 @@ class Node(OrgModelMixin):
@classmethod
@classmethod
def
default_node
(
cls
):
def
default_node
(
cls
):
defaults
=
{
'value'
:
'Default'
}
defaults
=
{
'value'
:
'Default'
}
return
cls
.
objects
.
get_or_create
(
defaults
=
defaults
,
key
=
'
0
'
)
return
cls
.
objects
.
get_or_create
(
defaults
=
defaults
,
key
=
'
1
'
)
@classmethod
@classmethod
def
get_tree_name_ref
(
cls
):
def
get_tree_name_ref
(
cls
):
...
...
apps/assets/models/user.py
View file @
09fbd3a5
...
@@ -7,6 +7,7 @@ import logging
...
@@ -7,6 +7,7 @@ import logging
from
django.core.cache
import
cache
from
django.core.cache
import
cache
from
django.db
import
models
from
django.db
import
models
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.core.validators
import
MinValueValidator
,
MaxValueValidator
from
common.utils
import
get_signer
from
common.utils
import
get_signer
from
..const
import
SYSTEM_USER_CONN_CACHE_KEY
from
..const
import
SYSTEM_USER_CONN_CACHE_KEY
...
@@ -111,7 +112,8 @@ class SystemUser(AssetUser):
...
@@ -111,7 +112,8 @@ class SystemUser(AssetUser):
nodes
=
models
.
ManyToManyField
(
'assets.Node'
,
blank
=
True
,
verbose_name
=
_
(
"Nodes"
))
nodes
=
models
.
ManyToManyField
(
'assets.Node'
,
blank
=
True
,
verbose_name
=
_
(
"Nodes"
))
assets
=
models
.
ManyToManyField
(
'assets.Asset'
,
blank
=
True
,
verbose_name
=
_
(
"Assets"
))
assets
=
models
.
ManyToManyField
(
'assets.Asset'
,
blank
=
True
,
verbose_name
=
_
(
"Assets"
))
priority
=
models
.
IntegerField
(
default
=
10
,
verbose_name
=
_
(
"Priority"
))
priority
=
models
.
IntegerField
(
default
=
20
,
verbose_name
=
_
(
"Priority"
),
validators
=
[
MinValueValidator
(
1
),
MaxValueValidator
(
100
)])
protocol
=
models
.
CharField
(
max_length
=
16
,
choices
=
PROTOCOL_CHOICES
,
default
=
'ssh'
,
verbose_name
=
_
(
'Protocol'
))
protocol
=
models
.
CharField
(
max_length
=
16
,
choices
=
PROTOCOL_CHOICES
,
default
=
'ssh'
,
verbose_name
=
_
(
'Protocol'
))
auto_push
=
models
.
BooleanField
(
default
=
True
,
verbose_name
=
_
(
'Auto push'
))
auto_push
=
models
.
BooleanField
(
default
=
True
,
verbose_name
=
_
(
'Auto push'
))
sudo
=
models
.
TextField
(
default
=
'/bin/whoami'
,
verbose_name
=
_
(
'Sudo'
))
sudo
=
models
.
TextField
(
default
=
'/bin/whoami'
,
verbose_name
=
_
(
'Sudo'
))
...
@@ -168,7 +170,7 @@ class SystemUser(AssetUser):
...
@@ -168,7 +170,7 @@ class SystemUser(AssetUser):
from
.cmd_filter
import
CommandFilterRule
from
.cmd_filter
import
CommandFilterRule
rules
=
CommandFilterRule
.
objects
.
filter
(
rules
=
CommandFilterRule
.
objects
.
filter
(
filter__in
=
self
.
cmd_filters
.
all
()
filter__in
=
self
.
cmd_filters
.
all
()
)
.
order_by
(
'priority'
)
.
distinct
()
)
.
distinct
()
return
rules
return
rules
@classmethod
@classmethod
...
...
apps/assets/templates/assets/asset_detail.html
View file @
09fbd3a5
...
@@ -69,6 +69,10 @@
...
@@ -69,6 +69,10 @@
<td>
{% trans 'Port' %}:
</td>
<td>
{% trans 'Port' %}:
</td>
<td><b>
{{ asset.port }}
</b></td>
<td><b>
{{ asset.port }}
</b></td>
</tr>
</tr>
<tr>
<td>
{% trans 'Protocol' %}:
</td>
<td><b>
{{ asset.protocol }}
</b></td>
</tr>
<tr>
<tr>
<td>
{% trans 'Admin user' %}:
</td>
<td>
{% trans 'Admin user' %}:
</td>
<td><b>
{{ asset.admin_user }}
</b></td>
<td><b>
{{ asset.admin_user }}
</b></td>
...
...
apps/assets/templates/assets/cmd_filter_list.html
View file @
09fbd3a5
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<div
class=
"alert alert-info help-message"
>
<div
class=
"alert alert-info help-message"
>
{% trans 'System user bound some command filter, each command filter has some rules,'%}
{% trans 'System user bound some command filter, each command filter has some rules,'%}
{% trans 'When user login asset with this system user, then run a command,' %}
{% trans 'When user login asset with this system user, then run a command,' %}
{% trans 'The command will be filter by rules, higher priority
(lower number)
rule run first,' %}
{% trans 'The command will be filter by rules, higher priority rule run first,' %}
{% trans 'When a rule matched, if rule action is allow, then allow command execute,' %}
{% trans 'When a rule matched, if rule action is allow, then allow command execute,' %}
{% trans 'else if action is deny, then command with be deny,' %}
{% trans 'else if action is deny, then command with be deny,' %}
{% trans 'else match next rule, if none matched, allowed' %}
{% trans 'else match next rule, if none matched, allowed' %}
...
...
apps/assets/views/asset.py
View file @
09fbd3a5
...
@@ -45,10 +45,7 @@ class AssetListView(AdminUserRequiredMixin, TemplateView):
...
@@ -45,10 +45,7 @@ class AssetListView(AdminUserRequiredMixin, TemplateView):
template_name
=
'assets/asset_list.html'
template_name
=
'assets/asset_list.html'
def
get_context_data
(
self
,
**
kwargs
):
def
get_context_data
(
self
,
**
kwargs
):
if
current_org
.
is_default
():
Node
.
root
()
Node
.
default_node
()
else
:
Node
.
root
()
context
=
{
context
=
{
'app'
:
_
(
'Assets'
),
'app'
:
_
(
'Assets'
),
'action'
:
_
(
'Asset list'
),
'action'
:
_
(
'Asset list'
),
...
...
apps/common/forms.py
View file @
09fbd3a5
...
@@ -18,6 +18,9 @@ class BaseForm(forms.Form):
...
@@ -18,6 +18,9 @@ class BaseForm(forms.Form):
db_value
=
getattr
(
common_settings
,
name
)
db_value
=
getattr
(
common_settings
,
name
)
django_value
=
getattr
(
settings
,
name
)
if
hasattr
(
settings
,
name
)
else
None
django_value
=
getattr
(
settings
,
name
)
if
hasattr
(
settings
,
name
)
else
None
if
db_value
is
None
and
django_value
is
None
:
continue
if
db_value
is
False
or
db_value
:
if
db_value
is
False
or
db_value
:
if
isinstance
(
db_value
,
dict
):
if
isinstance
(
db_value
,
dict
):
db_value
=
json
.
dumps
(
db_value
)
db_value
=
json
.
dumps
(
db_value
)
...
...
apps/common/templatetags/common_tags.py
View file @
09fbd3a5
...
@@ -106,3 +106,8 @@ def to_dict(data):
...
@@ -106,3 +106,8 @@ def to_dict(data):
def
sort
(
data
):
def
sort
(
data
):
print
(
data
)
print
(
data
)
return
sorted
(
data
)
return
sorted
(
data
)
@register.filter
def
subtract
(
value
,
arg
):
return
value
-
arg
apps/locale/zh/LC_MESSAGES/django.mo
View file @
09fbd3a5
No preview for this file type
apps/locale/zh/LC_MESSAGES/django.po
View file @
09fbd3a5
...
@@ -8,7 +8,7 @@ msgid ""
...
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
msgstr ""
"Project-Id-Version: Jumpserver 0.3.3\n"
"Project-Id-Version: Jumpserver 0.3.3\n"
"Report-Msgid-Bugs-To: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-10-1
2 14:58
+0800\n"
"POT-Creation-Date: 2018-10-1
6 16:03
+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: ibuler <ibuler@qq.com>\n"
"Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: Jumpserver team<ibuler@qq.com>\n"
"Language-Team: Jumpserver team<ibuler@qq.com>\n"
...
@@ -33,7 +33,7 @@ msgstr "更新节点资产硬件信息: {}"
...
@@ -33,7 +33,7 @@ msgstr "更新节点资产硬件信息: {}"
msgid "Test if the assets under the node are connectable: {}"
msgid "Test if the assets under the node are connectable: {}"
msgstr "测试节点下资产是否可连接: {}"
msgstr "测试节点下资产是否可连接: {}"
#: assets/forms/asset.py:27 assets/models/asset.py:8
2 assets/models/user.py:112
#: assets/forms/asset.py:27 assets/models/asset.py:8
3 assets/models/user.py:113
#: assets/templates/assets/asset_detail.html:183
#: assets/templates/assets/asset_detail.html:183
#: assets/templates/assets/asset_detail.html:191
#: assets/templates/assets/asset_detail.html:191
#: assets/templates/assets/system_user_asset.html:95 perms/models.py:32
#: assets/templates/assets/system_user_asset.html:95 perms/models.py:32
...
@@ -41,9 +41,11 @@ msgid "Nodes"
...
@@ -41,9 +41,11 @@ msgid "Nodes"
msgstr "节点管理"
msgstr "节点管理"
#: assets/forms/asset.py:30 assets/forms/asset.py:69 assets/forms/asset.py:112
#: assets/forms/asset.py:30 assets/forms/asset.py:69 assets/forms/asset.py:112
#: assets/forms/asset.py:116 assets/models/asset.py:8
7
#: assets/forms/asset.py:116 assets/models/asset.py:8
8
#: assets/models/cluster.py:19 assets/models/user.py:7
2
#: assets/models/cluster.py:19 assets/models/user.py:7
3
#: assets/templates/assets/asset_detail.html:73 templates/_nav.html:24
#: assets/templates/assets/asset_detail.html:73 templates/_nav.html:24
#: xpack/plugins/cloud/models.py:137
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:67
#: xpack/plugins/orgs/templates/orgs/org_list.html:18
#: xpack/plugins/orgs/templates/orgs/org_list.html:18
msgid "Admin user"
msgid "Admin user"
msgstr "管理用户"
msgstr "管理用户"
...
@@ -59,7 +61,7 @@ msgstr "管理用户"
...
@@ -59,7 +61,7 @@ msgstr "管理用户"
msgid "Label"
msgid "Label"
msgstr "标签"
msgstr "标签"
#: assets/forms/asset.py:37 assets/forms/asset.py:76 assets/models/asset.py:7
8
#: assets/forms/asset.py:37 assets/forms/asset.py:76 assets/models/asset.py:7
9
#: assets/models/domain.py:24 assets/models/domain.py:50
#: assets/models/domain.py:24 assets/models/domain.py:50
#: assets/templates/assets/user_asset_list.html:168
#: assets/templates/assets/user_asset_list.html:168
#: xpack/plugins/orgs/templates/orgs/org_list.html:17
#: xpack/plugins/orgs/templates/orgs/org_list.html:17
...
@@ -73,6 +75,9 @@ msgstr "网域"
...
@@ -73,6 +75,9 @@ msgstr "网域"
#: perms/forms.py:44 perms/models.py:79
#: perms/forms.py:44 perms/models.py:79
#: perms/templates/perms/asset_permission_list.html:57
#: perms/templates/perms/asset_permission_list.html:57
#: perms/templates/perms/asset_permission_list.html:151
#: perms/templates/perms/asset_permission_list.html:151
#: xpack/plugins/cloud/models.py:136
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:63
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:66
msgid "Node"
msgid "Node"
msgstr "节点"
msgstr "节点"
...
@@ -99,7 +104,7 @@ msgstr "如果有多个的互相隔离的网络,设置资产属于的网域,
...
@@ -99,7 +104,7 @@ msgstr "如果有多个的互相隔离的网络,设置资产属于的网域,
msgid "Select assets"
msgid "Select assets"
msgstr "选择资产"
msgstr "选择资产"
#: assets/forms/asset.py:108 assets/models/asset.py:7
5
#: assets/forms/asset.py:108 assets/models/asset.py:7
6
#: assets/models/domain.py:48 assets/templates/assets/admin_user_assets.html:53
#: assets/models/domain.py:48 assets/templates/assets/admin_user_assets.html:53
#: assets/templates/assets/asset_detail.html:69
#: assets/templates/assets/asset_detail.html:69
#: assets/templates/assets/domain_gateway_list.html:58
#: assets/templates/assets/domain_gateway_list.html:58
...
@@ -109,7 +114,7 @@ msgid "Port"
...
@@ -109,7 +114,7 @@ msgid "Port"
msgstr "端口"
msgstr "端口"
#: assets/forms/domain.py:15 assets/forms/label.py:13
#: assets/forms/domain.py:15 assets/forms/label.py:13
#: assets/models/asset.py:24
2
assets/templates/assets/admin_user_list.html:28
#: assets/models/asset.py:24
3
assets/templates/assets/admin_user_list.html:28
#: assets/templates/assets/domain_detail.html:60
#: assets/templates/assets/domain_detail.html:60
#: assets/templates/assets/domain_list.html:26
#: assets/templates/assets/domain_list.html:26
#: assets/templates/assets/label_list.html:16
#: assets/templates/assets/label_list.html:16
...
@@ -125,6 +130,8 @@ msgstr "端口"
...
@@ -125,6 +130,8 @@ msgstr "端口"
#: terminal/templates/terminal/command_list.html:73
#: terminal/templates/terminal/command_list.html:73
#: terminal/templates/terminal/session_list.html:41
#: terminal/templates/terminal/session_list.html:41
#: terminal/templates/terminal/session_list.html:72
#: terminal/templates/terminal/session_list.html:72
#: xpack/plugins/cloud/models.py:207
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:65
#: xpack/plugins/orgs/templates/orgs/org_list.html:16
#: xpack/plugins/orgs/templates/orgs/org_list.html:16
msgid "Asset"
msgid "Asset"
msgstr "资产"
msgstr "资产"
...
@@ -163,9 +170,13 @@ msgstr "不能包含特殊字符"
...
@@ -163,9 +170,13 @@ msgstr "不能包含特殊字符"
#: users/templates/users/user_list.html:23
#: users/templates/users/user_list.html:23
#: users/templates/users/user_profile.html:51
#: users/templates/users/user_profile.html:51
#: users/templates/users/user_pubkey_update.html:53
#: users/templates/users/user_pubkey_update.html:53
#: xpack/plugins/cloud/models.py:40 xpack/plugins/cloud/models.py:132
#: xpack/plugins/cloud/templates/cloud/account_detail.html:52
#: xpack/plugins/cloud/templates/cloud/account_list.html:12
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:55
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:12
#: xpack/plugins/orgs/templates/orgs/org_detail.html:52
#: xpack/plugins/orgs/templates/orgs/org_detail.html:52
#: xpack/plugins/orgs/templates/orgs/org_list.html:12
#: xpack/plugins/orgs/templates/orgs/org_list.html:12
#: xpack/templates/orgs/org_list.html:12
msgid "Name"
msgid "Name"
msgstr "名称"
msgstr "名称"
...
@@ -190,7 +201,7 @@ msgstr "用户名"
...
@@ -190,7 +201,7 @@ msgstr "用户名"
msgid "Password or private key passphrase"
msgid "Password or private key passphrase"
msgstr "密码或密钥密码"
msgstr "密码或密钥密码"
#: assets/forms/user.py:26 assets/models/base.py:24 common/forms.py:10
4
#: assets/forms/user.py:26 assets/models/base.py:24 common/forms.py:10
7
#: users/forms.py:17 users/forms.py:35 users/forms.py:47
#: users/forms.py:17 users/forms.py:35 users/forms.py:47
#: users/templates/users/login.html:65
#: users/templates/users/login.html:65
#: users/templates/users/reset_password.html:53
#: users/templates/users/reset_password.html:53
...
@@ -218,7 +229,7 @@ msgstr "密码和私钥, 必须输入一个"
...
@@ -218,7 +229,7 @@ msgstr "密码和私钥, 必须输入一个"
msgid "* Automatic login mode, must fill in the username."
msgid "* Automatic login mode, must fill in the username."
msgstr "自动登录模式,必须填写用户名"
msgstr "自动登录模式,必须填写用户名"
#: assets/forms/user.py:146 assets/models/user.py:12
0
#: assets/forms/user.py:146 assets/models/user.py:12
2
#: assets/templates/assets/_system_user.html:66
#: assets/templates/assets/_system_user.html:66
#: assets/templates/assets/system_user_detail.html:165
#: assets/templates/assets/system_user_detail.html:165
msgid "Command filter"
msgid "Command filter"
...
@@ -230,17 +241,17 @@ msgstr "自动推送系统用户到资产"
...
@@ -230,17 +241,17 @@ msgstr "自动推送系统用户到资产"
#: assets/forms/user.py:153
#: assets/forms/user.py:153
msgid ""
msgid ""
"
High level will be using login asset as default, if user was granted more
"
"
1-100, High level will be using login asset as default, if user was granted
"
"than 2 system user"
"
more
than 2 system user"
msgstr "高优先级的系统用户将会作为默认登录用户"
msgstr "
1-100, 1最低优先级,100最高优先级。授权多个用户时,
高优先级的系统用户将会作为默认登录用户"
#: assets/forms/user.py:155
#: assets/forms/user.py:155
msgid ""
msgid ""
"If you choose manual login mode, you do not need to fill in the username and "
"If you choose manual login mode, you do not need to fill in the username and "
"password."
"password."
msgstr "如果选择手动登录模式,用户名和密码
则不需要
填写"
msgstr "如果选择手动登录模式,用户名和密码
可以不
填写"
#: assets/models/asset.py:7
2
assets/models/domain.py:47
#: assets/models/asset.py:7
3
assets/models/domain.py:47
#: assets/templates/assets/_asset_list_modal.html:46
#: assets/templates/assets/_asset_list_modal.html:46
#: assets/templates/assets/admin_user_assets.html:52
#: assets/templates/assets/admin_user_assets.html:52
#: assets/templates/assets/asset_detail.html:61
#: assets/templates/assets/asset_detail.html:61
...
@@ -249,28 +260,28 @@ msgstr "如果选择手动登录模式,用户名和密码则不需要填写"
...
@@ -249,28 +260,28 @@ msgstr "如果选择手动登录模式,用户名和密码则不需要填写"
#: assets/templates/assets/system_user_asset.html:51
#: assets/templates/assets/system_user_asset.html:51
#: assets/templates/assets/user_asset_list.html:46
#: assets/templates/assets/user_asset_list.html:46
#: assets/templates/assets/user_asset_list.html:162
#: assets/templates/assets/user_asset_list.html:162
#: audits/templates/audits/login_log_list.html:52 common/forms.py:13
3
#: audits/templates/audits/login_log_list.html:52 common/forms.py:13
6
#: perms/templates/perms/asset_permission_asset.html:55
#: perms/templates/perms/asset_permission_asset.html:55
#: users/templates/users/user_granted_asset.html:45
#: users/templates/users/user_granted_asset.html:45
#: users/templates/users/user_group_granted_asset.html:45
#: users/templates/users/user_group_granted_asset.html:45
msgid "IP"
msgid "IP"
msgstr "IP"
msgstr "IP"
#: assets/models/asset.py:7
3
assets/templates/assets/_asset_list_modal.html:45
#: assets/models/asset.py:7
4
assets/templates/assets/_asset_list_modal.html:45
#: assets/templates/assets/admin_user_assets.html:51
#: assets/templates/assets/admin_user_assets.html:51
#: assets/templates/assets/asset_detail.html:57
#: assets/templates/assets/asset_detail.html:57
#: assets/templates/assets/asset_list.html:92
#: assets/templates/assets/asset_list.html:92
#: assets/templates/assets/system_user_asset.html:50
#: assets/templates/assets/system_user_asset.html:50
#: assets/templates/assets/user_asset_list.html:45
#: assets/templates/assets/user_asset_list.html:45
#: assets/templates/assets/user_asset_list.html:161 common/forms.py:13
2
#: assets/templates/assets/user_asset_list.html:161 common/forms.py:13
5
#: perms/templates/perms/asset_permission_asset.html:54
#: perms/templates/perms/asset_permission_asset.html:54
#: users/templates/users/user_granted_asset.html:44
#: users/templates/users/user_granted_asset.html:44
#: users/templates/users/user_group_granted_asset.html:44
#: users/templates/users/user_group_granted_asset.html:44
msgid "Hostname"
msgid "Hostname"
msgstr "主机名"
msgstr "主机名"
#: assets/models/asset.py:7
4
assets/models/domain.py:49
#: assets/models/asset.py:7
5
assets/models/domain.py:49
#: assets/models/user.py:11
5
#: assets/models/user.py:11
7
#: assets/templates/assets/domain_gateway_list.html:59
#: assets/templates/assets/domain_gateway_list.html:59
#: assets/templates/assets/system_user_detail.html:70
#: assets/templates/assets/system_user_detail.html:70
#: assets/templates/assets/system_user_list.html:31
#: assets/templates/assets/system_user_list.html:31
...
@@ -279,90 +290,90 @@ msgstr "主机名"
...
@@ -279,90 +290,90 @@ msgstr "主机名"
msgid "Protocol"
msgid "Protocol"
msgstr "协议"
msgstr "协议"
#: assets/models/asset.py:7
6
assets/templates/assets/asset_detail.html:97
#: assets/models/asset.py:7
7
assets/templates/assets/asset_detail.html:97
#: assets/templates/assets/user_asset_list.html:165
#: assets/templates/assets/user_asset_list.html:165
msgid "Platform"
msgid "Platform"
msgstr "系统平台"
msgstr "系统平台"
#: assets/models/asset.py:8
3
assets/models/cmd_filter.py:20
#: assets/models/asset.py:8
4
assets/models/cmd_filter.py:20
#: assets/models/domain.py:52 assets/models/label.py:21
#: assets/models/domain.py:52 assets/models/label.py:21
#: assets/templates/assets/asset_detail.html:105
#: assets/templates/assets/asset_detail.html:105
#: assets/templates/assets/user_asset_list.html:169
#: assets/templates/assets/user_asset_list.html:169
msgid "Is active"
msgid "Is active"
msgstr "激活"
msgstr "激活"
#: assets/models/asset.py:9
0
assets/templates/assets/asset_detail.html:65
#: assets/models/asset.py:9
1
assets/templates/assets/asset_detail.html:65
msgid "Public IP"
msgid "Public IP"
msgstr "公网IP"
msgstr "公网IP"
#: assets/models/asset.py:9
1
assets/templates/assets/asset_detail.html:113
#: assets/models/asset.py:9
2
assets/templates/assets/asset_detail.html:113
msgid "Asset number"
msgid "Asset number"
msgstr "资产编号"
msgstr "资产编号"
#: assets/models/asset.py:9
5
assets/templates/assets/asset_detail.html:77
#: assets/models/asset.py:9
6
assets/templates/assets/asset_detail.html:77
msgid "Vendor"
msgid "Vendor"
msgstr "制造商"
msgstr "制造商"
#: assets/models/asset.py:9
7
assets/templates/assets/asset_detail.html:81
#: assets/models/asset.py:9
8
assets/templates/assets/asset_detail.html:81
msgid "Model"
msgid "Model"
msgstr "型号"
msgstr "型号"
#: assets/models/asset.py:
99
assets/templates/assets/asset_detail.html:109
#: assets/models/asset.py:
100
assets/templates/assets/asset_detail.html:109
msgid "Serial number"
msgid "Serial number"
msgstr "序列号"
msgstr "序列号"
#: assets/models/asset.py:10
2
#: assets/models/asset.py:10
3
msgid "CPU model"
msgid "CPU model"
msgstr "CPU型号"
msgstr "CPU型号"
#: assets/models/asset.py:10
3
#: assets/models/asset.py:10
4
msgid "CPU count"
msgid "CPU count"
msgstr "CPU数量"
msgstr "CPU数量"
#: assets/models/asset.py:10
4
#: assets/models/asset.py:10
5
msgid "CPU cores"
msgid "CPU cores"
msgstr "CPU核数"
msgstr "CPU核数"
#: assets/models/asset.py:10
5
#: assets/models/asset.py:10
6
msgid "CPU vcpus"
msgid "CPU vcpus"
msgstr "CPU总数"
msgstr "CPU总数"
#: assets/models/asset.py:10
7
assets/templates/assets/asset_detail.html:89
#: assets/models/asset.py:10
8
assets/templates/assets/asset_detail.html:89
msgid "Memory"
msgid "Memory"
msgstr "内存"
msgstr "内存"
#: assets/models/asset.py:1
09
#: assets/models/asset.py:1
10
msgid "Disk total"
msgid "Disk total"
msgstr "硬盘大小"
msgstr "硬盘大小"
#: assets/models/asset.py:11
1
#: assets/models/asset.py:11
2
msgid "Disk info"
msgid "Disk info"
msgstr "硬盘信息"
msgstr "硬盘信息"
#: assets/models/asset.py:11
4
assets/templates/assets/asset_detail.html:101
#: assets/models/asset.py:11
5
assets/templates/assets/asset_detail.html:101
#: assets/templates/assets/user_asset_list.html:166
#: assets/templates/assets/user_asset_list.html:166
msgid "OS"
msgid "OS"
msgstr "操作系统"
msgstr "操作系统"
#: assets/models/asset.py:11
6
#: assets/models/asset.py:11
7
msgid "OS version"
msgid "OS version"
msgstr "系统版本"
msgstr "系统版本"
#: assets/models/asset.py:11
8
#: assets/models/asset.py:11
9
msgid "OS arch"
msgid "OS arch"
msgstr "系统架构"
msgstr "系统架构"
#: assets/models/asset.py:12
0
#: assets/models/asset.py:12
1
msgid "Hostname raw"
msgid "Hostname raw"
msgstr "主机名原始"
msgstr "主机名原始"
#: assets/models/asset.py:12
4
assets/templates/assets/asset_create.html:34
#: assets/models/asset.py:12
5
assets/templates/assets/asset_create.html:34
#: assets/templates/assets/asset_detail.html:220
#: assets/templates/assets/asset_detail.html:220
#: assets/templates/assets/asset_update.html:39 templates/_nav.html:26
#: assets/templates/assets/asset_update.html:39 templates/_nav.html:26
msgid "Labels"
msgid "Labels"
msgstr "标签管理"
msgstr "标签管理"
#: assets/models/asset.py:12
6
assets/models/base.py:30
#: assets/models/asset.py:12
7
assets/models/base.py:30
#: assets/models/cluster.py:28 assets/models/cmd_filter.py:24
#: assets/models/cluster.py:28 assets/models/cmd_filter.py:24
#: assets/models/cmd_filter.py:54 assets/models/group.py:21
#: assets/models/cmd_filter.py:54 assets/models/group.py:21
#: assets/templates/assets/admin_user_detail.html:68
#: assets/templates/assets/admin_user_detail.html:68
...
@@ -373,10 +384,11 @@ msgstr "标签管理"
...
@@ -373,10 +384,11 @@ msgstr "标签管理"
#: ops/templates/ops/adhoc_detail.html:86 orgs/models.py:15 perms/models.py:37
#: ops/templates/ops/adhoc_detail.html:86 orgs/models.py:15 perms/models.py:37
#: perms/models.py:84 perms/templates/perms/asset_permission_detail.html:98
#: perms/models.py:84 perms/templates/perms/asset_permission_detail.html:98
#: users/models/user.py:92 users/templates/users/user_detail.html:111
#: users/models/user.py:92 users/templates/users/user_detail.html:111
#: xpack/plugins/cloud/models.py:46 xpack/plugins/cloud/models.py:140
msgid "Created by"
msgid "Created by"
msgstr "创建者"
msgstr "创建者"
#: assets/models/asset.py:1
29
assets/models/cluster.py:26
#: assets/models/asset.py:1
30
assets/models/cluster.py:26
#: assets/models/domain.py:21 assets/models/group.py:22
#: assets/models/domain.py:21 assets/models/group.py:22
#: assets/models/label.py:24 assets/templates/assets/admin_user_detail.html:64
#: assets/models/label.py:24 assets/templates/assets/admin_user_detail.html:64
#: assets/templates/assets/cmd_filter_detail.html:69
#: assets/templates/assets/cmd_filter_detail.html:69
...
@@ -387,11 +399,14 @@ msgstr "创建者"
...
@@ -387,11 +399,14 @@ msgstr "创建者"
#: perms/templates/perms/asset_permission_detail.html:94
#: perms/templates/perms/asset_permission_detail.html:94
#: terminal/templates/terminal/terminal_detail.html:59 users/models/group.py:17
#: terminal/templates/terminal/terminal_detail.html:59 users/models/group.py:17
#: users/templates/users/user_group_detail.html:63
#: users/templates/users/user_group_detail.html:63
#: xpack/plugins/cloud/models.py:47 xpack/plugins/cloud/models.py:141
#: xpack/plugins/cloud/templates/cloud/account_detail.html:68
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:79
#: xpack/plugins/orgs/templates/orgs/org_detail.html:60
#: xpack/plugins/orgs/templates/orgs/org_detail.html:60
msgid "Date created"
msgid "Date created"
msgstr "创建日期"
msgstr "创建日期"
#: assets/models/asset.py:13
1
assets/models/base.py:27
#: assets/models/asset.py:13
2
assets/models/base.py:27
#: assets/models/cluster.py:29 assets/models/cmd_filter.py:21
#: assets/models/cluster.py:29 assets/models/cmd_filter.py:21
#: assets/models/cmd_filter.py:51 assets/models/domain.py:19
#: assets/models/cmd_filter.py:51 assets/models/domain.py:19
#: assets/models/domain.py:51 assets/models/group.py:23
#: assets/models/domain.py:51 assets/models/group.py:23
...
@@ -414,10 +429,14 @@ msgstr "创建日期"
...
@@ -414,10 +429,14 @@ msgstr "创建日期"
#: users/templates/users/user_detail.html:123
#: users/templates/users/user_detail.html:123
#: users/templates/users/user_group_detail.html:67
#: users/templates/users/user_group_detail.html:67
#: users/templates/users/user_group_list.html:14
#: users/templates/users/user_group_list.html:14
#: users/templates/users/user_profile.html:130
#: users/templates/users/user_profile.html:130 xpack/plugins/cloud/models.py:45
#: xpack/plugins/cloud/models.py:138
#: xpack/plugins/cloud/templates/cloud/account_detail.html:72
#: xpack/plugins/cloud/templates/cloud/account_list.html:15
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:71
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:16
#: xpack/plugins/orgs/templates/orgs/org_detail.html:64
#: xpack/plugins/orgs/templates/orgs/org_detail.html:64
#: xpack/plugins/orgs/templates/orgs/org_list.html:22
#: xpack/plugins/orgs/templates/orgs/org_list.html:22
#: xpack/templates/orgs/org_list.html:14
msgid "Comment"
msgid "Comment"
msgstr "备注"
msgstr "备注"
...
@@ -519,14 +538,14 @@ msgstr "过滤器"
...
@@ -519,14 +538,14 @@ msgstr "过滤器"
msgid "Type"
msgid "Type"
msgstr "类型"
msgstr "类型"
#: assets/models/cmd_filter.py:47 assets/models/user.py:11
4
#: assets/models/cmd_filter.py:47 assets/models/user.py:11
5
#: assets/templates/assets/cmd_filter_rule_list.html:60
#: assets/templates/assets/cmd_filter_rule_list.html:60
msgid "Priority"
msgid "Priority"
msgstr "优先级"
msgstr "优先级"
#: assets/models/cmd_filter.py:47
#: assets/models/cmd_filter.py:47
msgid "1-100, the
low
er will be match first"
msgid "1-100, the
high
er will be match first"
msgstr "优先级可选范围为1-100,1最
高优先级 100最低
优先级"
msgstr "优先级可选范围为1-100,1最
低优先级,100最高
优先级"
#: assets/models/cmd_filter.py:49
#: assets/models/cmd_filter.py:49
#: assets/templates/assets/cmd_filter_rule_list.html:59
#: assets/templates/assets/cmd_filter_rule_list.html:59
...
@@ -556,8 +575,9 @@ msgstr "每行一个命令"
...
@@ -556,8 +575,9 @@ msgstr "每行一个命令"
#: terminal/templates/terminal/terminal_list.html:36
#: terminal/templates/terminal/terminal_list.html:36
#: users/templates/users/user_group_list.html:15
#: users/templates/users/user_group_list.html:15
#: users/templates/users/user_list.html:29
#: users/templates/users/user_list.html:29
#: xpack/plugins/cloud/templates/cloud/account_list.html:16
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:18
#: xpack/plugins/orgs/templates/orgs/org_list.html:23
#: xpack/plugins/orgs/templates/orgs/org_list.html:23
#: xpack/templates/orgs/org_list.html:15
msgid "Action"
msgid "Action"
msgstr "动作"
msgstr "动作"
...
@@ -598,7 +618,6 @@ msgstr "默认资产组"
...
@@ -598,7 +618,6 @@ msgstr "默认资产组"
#: xpack/plugins/orgs/forms.py:26
#: xpack/plugins/orgs/forms.py:26
#: xpack/plugins/orgs/templates/orgs/org_detail.html:113
#: xpack/plugins/orgs/templates/orgs/org_detail.html:113
#: xpack/plugins/orgs/templates/orgs/org_list.html:14
#: xpack/plugins/orgs/templates/orgs/org_list.html:14
#: xpack/templates/orgs/org_list.html:13
msgid "User"
msgid "User"
msgstr "用户"
msgstr "用户"
...
@@ -615,23 +634,23 @@ msgstr "分类"
...
@@ -615,23 +634,23 @@ msgstr "分类"
msgid "Key"
msgid "Key"
msgstr ""
msgstr ""
#: assets/models/user.py:10
8
#: assets/models/user.py:10
9
msgid "Automatic login"
msgid "Automatic login"
msgstr "自动登录"
msgstr "自动登录"
#: assets/models/user.py:1
09
#: assets/models/user.py:1
10
msgid "Manually login"
msgid "Manually login"
msgstr "手动登录"
msgstr "手动登录"
#: assets/models/user.py:11
3
#: assets/models/user.py:11
4
#: assets/templates/assets/_asset_group_bulk_update_modal.html:11
#: assets/templates/assets/_asset_group_bulk_update_modal.html:11
#: assets/templates/assets/system_user_asset.html:22
#: assets/templates/assets/system_user_asset.html:22
#: assets/templates/assets/system_user_detail.html:22
#: assets/templates/assets/system_user_detail.html:22
#: assets/views/admin_user.py:29 assets/views/admin_user.py:47
#: assets/views/admin_user.py:29 assets/views/admin_user.py:47
#: assets/views/admin_user.py:63 assets/views/admin_user.py:78
#: assets/views/admin_user.py:63 assets/views/admin_user.py:78
#: assets/views/admin_user.py:102 assets/views/asset.py:5
3
#: assets/views/admin_user.py:102 assets/views/asset.py:5
0
#: assets/views/asset.py:
92 assets/views/asset.py:136 assets/views/asset.py:153
#: assets/views/asset.py:
89 assets/views/asset.py:133 assets/views/asset.py:150
#: assets/views/asset.py:17
7
assets/views/cmd_filter.py:30
#: assets/views/asset.py:17
4
assets/views/cmd_filter.py:30
#: assets/views/cmd_filter.py:46 assets/views/cmd_filter.py:62
#: assets/views/cmd_filter.py:46 assets/views/cmd_filter.py:62
#: assets/views/cmd_filter.py:78 assets/views/cmd_filter.py:97
#: assets/views/cmd_filter.py:78 assets/views/cmd_filter.py:97
#: assets/views/cmd_filter.py:130 assets/views/cmd_filter.py:163
#: assets/views/cmd_filter.py:130 assets/views/cmd_filter.py:163
...
@@ -645,26 +664,26 @@ msgstr "手动登录"
...
@@ -645,26 +664,26 @@ msgstr "手动登录"
msgid "Assets"
msgid "Assets"
msgstr "资产管理"
msgstr "资产管理"
#: assets/models/user.py:11
6
assets/templates/assets/_system_user.html:59
#: assets/models/user.py:11
8
assets/templates/assets/_system_user.html:59
#: assets/templates/assets/system_user_detail.html:122
#: assets/templates/assets/system_user_detail.html:122
#: assets/templates/assets/system_user_update.html:10
#: assets/templates/assets/system_user_update.html:10
msgid "Auto push"
msgid "Auto push"
msgstr "自动推送"
msgstr "自动推送"
#: assets/models/user.py:11
7
assets/templates/assets/system_user_detail.html:74
#: assets/models/user.py:11
9
assets/templates/assets/system_user_detail.html:74
msgid "Sudo"
msgid "Sudo"
msgstr "Sudo"
msgstr "Sudo"
#: assets/models/user.py:1
18
assets/templates/assets/system_user_detail.html:79
#: assets/models/user.py:1
20
assets/templates/assets/system_user_detail.html:79
msgid "Shell"
msgid "Shell"
msgstr "Shell"
msgstr "Shell"
#: assets/models/user.py:1
19
assets/templates/assets/system_user_detail.html:66
#: assets/models/user.py:1
21
assets/templates/assets/system_user_detail.html:66
#: assets/templates/assets/system_user_list.html:32
#: assets/templates/assets/system_user_list.html:32
msgid "Login mode"
msgid "Login mode"
msgstr "登录模式"
msgstr "登录模式"
#: assets/models/user.py:1
89
assets/templates/assets/user_asset_list.html:167
#: assets/models/user.py:1
91
assets/templates/assets/user_asset_list.html:167
#: audits/models.py:19 audits/templates/audits/ftp_log_list.html:49
#: audits/models.py:19 audits/templates/audits/ftp_log_list.html:49
#: audits/templates/audits/ftp_log_list.html:72 perms/forms.py:40
#: audits/templates/audits/ftp_log_list.html:72 perms/forms.py:40
#: perms/models.py:33 perms/models.py:81
#: perms/models.py:33 perms/models.py:81
...
@@ -779,7 +798,7 @@ msgstr "资产csv文件"
...
@@ -779,7 +798,7 @@ msgstr "资产csv文件"
msgid "If set id, will use this id update asset existed"
msgid "If set id, will use this id update asset existed"
msgstr "如果设置了id,则会使用该行信息更新该id的资产"
msgstr "如果设置了id,则会使用该行信息更新该id的资产"
#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:5
4
#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:5
1
#: templates/_nav.html:22
#: templates/_nav.html:22
msgid "Asset list"
msgid "Asset list"
msgstr "资产列表"
msgstr "资产列表"
...
@@ -838,6 +857,8 @@ msgstr "其它"
...
@@ -838,6 +857,8 @@ msgstr "其它"
#: users/templates/users/user_profile_update.html:63
#: users/templates/users/user_profile_update.html:63
#: users/templates/users/user_pubkey_update.html:70
#: users/templates/users/user_pubkey_update.html:70
#: users/templates/users/user_pubkey_update.html:76
#: users/templates/users/user_pubkey_update.html:76
#: xpack/plugins/cloud/templates/cloud/account_create_update.html:33
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_create.html:35
msgid "Reset"
msgid "Reset"
msgstr "重置"
msgstr "重置"
...
@@ -872,7 +893,7 @@ msgid "Submit"
...
@@ -872,7 +893,7 @@ msgid "Submit"
msgstr "提交"
msgstr "提交"
#: assets/templates/assets/_user_asset_detail_modal.html:11
#: assets/templates/assets/_user_asset_detail_modal.html:11
#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:17
8
#: assets/templates/assets/asset_detail.html:20 assets/views/asset.py:17
5
msgid "Asset detail"
msgid "Asset detail"
msgstr "资产详情"
msgstr "资产详情"
...
@@ -961,9 +982,10 @@ msgstr "测试"
...
@@ -961,9 +982,10 @@ msgstr "测试"
#: users/templates/users/user_profile.html:151
#: users/templates/users/user_profile.html:151
#: users/templates/users/user_profile.html:181
#: users/templates/users/user_profile.html:181
#: users/templates/users/user_profile.html:190
#: users/templates/users/user_profile.html:190
#: xpack/plugins/cloud/templates/cloud/account_detail.html:25
#: xpack/plugins/cloud/templates/cloud/account_list.html:38
#: xpack/plugins/orgs/templates/orgs/org_detail.html:25
#: xpack/plugins/orgs/templates/orgs/org_detail.html:25
#: xpack/plugins/orgs/templates/orgs/org_list.html:85
#: xpack/plugins/orgs/templates/orgs/org_list.html:85
#: xpack/templates/orgs/org_list.html:43
msgid "Update"
msgid "Update"
msgstr "更新"
msgstr "更新"
...
@@ -990,9 +1012,12 @@ msgstr "更新"
...
@@ -990,9 +1012,12 @@ msgstr "更新"
#: users/templates/users/user_group_list.html:45
#: users/templates/users/user_group_list.html:45
#: users/templates/users/user_list.html:81
#: users/templates/users/user_list.html:81
#: users/templates/users/user_list.html:85
#: users/templates/users/user_list.html:85
#: xpack/plugins/cloud/templates/cloud/account_detail.html:29
#: xpack/plugins/cloud/templates/cloud/account_list.html:40
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:32
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:54
#: xpack/plugins/orgs/templates/orgs/org_detail.html:29
#: xpack/plugins/orgs/templates/orgs/org_detail.html:29
#: xpack/plugins/orgs/templates/orgs/org_list.html:87
#: xpack/plugins/orgs/templates/orgs/org_list.html:87
#: xpack/templates/orgs/org_list.html:45
msgid "Delete"
msgid "Delete"
msgstr "删除"
msgstr "删除"
...
@@ -1021,8 +1046,9 @@ msgstr "选择节点"
...
@@ -1021,8 +1046,9 @@ msgstr "选择节点"
#: users/templates/users/user_group_list.html:87
#: users/templates/users/user_group_list.html:87
#: users/templates/users/user_list.html:201
#: users/templates/users/user_list.html:201
#: users/templates/users/user_profile.html:232
#: users/templates/users/user_profile.html:232
#: xpack/plugins/cloud/templates/cloud/account_create_update.html:34
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_create.html:36
#: xpack/plugins/orgs/templates/orgs/org_create_update.html:33
#: xpack/plugins/orgs/templates/orgs/org_create_update.html:33
#: xpack/templates/orgs/org_list.html:86
msgid "Confirm"
msgid "Confirm"
msgstr "确认"
msgstr "确认"
...
@@ -1131,7 +1157,7 @@ msgstr ""
...
@@ -1131,7 +1157,7 @@ msgstr ""
"左侧是资产树,右击可以新建、删除、更改树节点,授权资产也是以节点方式组织的,"
"左侧是资产树,右击可以新建、删除、更改树节点,授权资产也是以节点方式组织的,"
"右侧是属于该节点下的资产"
"右侧是属于该节点下的资产"
#: assets/templates/assets/asset_list.html:69 assets/views/asset.py:9
3
#: assets/templates/assets/asset_list.html:69 assets/views/asset.py:9
0
msgid "Create asset"
msgid "Create asset"
msgstr "创建资产"
msgstr "创建资产"
...
@@ -1236,7 +1262,6 @@ msgstr "重命名失败,不能更改root节点的名称"
...
@@ -1236,7 +1262,6 @@ msgstr "重命名失败,不能更改root节点的名称"
#: users/templates/users/user_detail.html:470
#: users/templates/users/user_detail.html:470
#: users/templates/users/user_group_list.html:81
#: users/templates/users/user_group_list.html:81
#: users/templates/users/user_list.html:195
#: users/templates/users/user_list.html:195
#: xpack/templates/orgs/org_list.html:81
msgid "Are you sure?"
msgid "Are you sure?"
msgstr "你确认吗?"
msgstr "你确认吗?"
...
@@ -1297,10 +1322,8 @@ msgid "When user login asset with this system user, then run a command,"
...
@@ -1297,10 +1322,8 @@ msgid "When user login asset with this system user, then run a command,"
msgstr "当用户使用这个系统用户登录资产,然后执行一个命令"
msgstr "当用户使用这个系统用户登录资产,然后执行一个命令"
#: assets/templates/assets/cmd_filter_list.html:8
#: assets/templates/assets/cmd_filter_list.html:8
msgid ""
msgid "The command will be filter by rules, higher priority rule run first,"
"The command will be filter by rules, higher priority(lower number) rule run "
msgstr "这个命令需要被绑定过滤器的所有规则匹配,高优先级先被匹配,"
"first,"
msgstr "这个命令需要被绑定过滤器的所有规则匹配,高优先级(数字越低)先被匹配,"
#: assets/templates/assets/cmd_filter_list.html:9
#: assets/templates/assets/cmd_filter_list.html:9
msgid ""
msgid ""
...
@@ -1488,23 +1511,23 @@ msgstr "更新管理用户"
...
@@ -1488,23 +1511,23 @@ msgstr "更新管理用户"
msgid "Admin user detail"
msgid "Admin user detail"
msgstr "管理用户详情"
msgstr "管理用户详情"
#: assets/views/asset.py:6
7
templates/_nav_user.html:4
#: assets/views/asset.py:6
4
templates/_nav_user.html:4
msgid "My assets"
msgid "My assets"
msgstr "我的资产"
msgstr "我的资产"
#: assets/views/asset.py:10
7
#: assets/views/asset.py:10
4
msgid "Bulk update asset success"
msgid "Bulk update asset success"
msgstr "批量更新资产成功"
msgstr "批量更新资产成功"
#: assets/views/asset.py:13
7
#: assets/views/asset.py:13
4
msgid "Bulk update asset"
msgid "Bulk update asset"
msgstr "批量更新资产"
msgstr "批量更新资产"
#: assets/views/asset.py:15
4
#: assets/views/asset.py:15
1
msgid "Update asset"
msgid "Update asset"
msgstr "更新资产"
msgstr "更新资产"
#: assets/views/asset.py:29
4
#: assets/views/asset.py:29
1
msgid "already exists"
msgid "already exists"
msgstr "已经存在"
msgstr "已经存在"
...
@@ -1596,7 +1619,7 @@ msgstr "文件名"
...
@@ -1596,7 +1619,7 @@ msgstr "文件名"
#: audits/models.py:22 audits/templates/audits/ftp_log_list.html:76
#: audits/models.py:22 audits/templates/audits/ftp_log_list.html:76
#: ops/templates/ops/task_list.html:39 users/models/authentication.py:66
#: ops/templates/ops/task_list.html:39 users/models/authentication.py:66
#: users/templates/users/user_detail.html:452
#: users/templates/users/user_detail.html:452
xpack/plugins/cloud/api.py:61
msgid "Success"
msgid "Success"
msgstr "成功"
msgstr "成功"
...
@@ -1639,6 +1662,8 @@ msgstr "选择用户"
...
@@ -1639,6 +1662,8 @@ msgstr "选择用户"
#: templates/_base_list.html:43 templates/_header_bar.html:8
#: templates/_base_list.html:43 templates/_header_bar.html:8
#: terminal/templates/terminal/command_list.html:60
#: terminal/templates/terminal/command_list.html:60
#: terminal/templates/terminal/session_list.html:61
#: terminal/templates/terminal/session_list.html:61
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:52
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:50
msgid "Search"
msgid "Search"
msgstr "搜索"
msgstr "搜索"
...
@@ -1647,6 +1672,8 @@ msgstr "搜索"
...
@@ -1647,6 +1672,8 @@ msgstr "搜索"
#: ops/templates/ops/adhoc_history_detail.html:49
#: ops/templates/ops/adhoc_history_detail.html:49
#: ops/templates/ops/task_detail.html:55
#: ops/templates/ops/task_detail.html:55
#: terminal/templates/terminal/session_list.html:70
#: terminal/templates/terminal/session_list.html:70
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:64
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:62
msgid "ID"
msgid "ID"
msgstr "ID"
msgstr "ID"
...
@@ -1665,12 +1692,16 @@ msgid "MFA"
...
@@ -1665,12 +1692,16 @@ msgid "MFA"
msgstr "MFA"
msgstr "MFA"
#: audits/templates/audits/login_log_list.html:55
#: audits/templates/audits/login_log_list.html:55
#: users/models/authentication.py:76
#: users/models/authentication.py:76 xpack/plugins/cloud/models.py:192
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:69
msgid "Reason"
msgid "Reason"
msgstr "原因"
msgstr "原因"
#: audits/templates/audits/login_log_list.html:56
#: audits/templates/audits/login_log_list.html:56
#: users/models/authentication.py:77
#: users/models/authentication.py:77 xpack/plugins/cloud/models.py:191
#: xpack/plugins/cloud/models.py:208
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:70
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:67
msgid "Status"
msgid "Status"
msgstr "状态"
msgstr "状态"
...
@@ -1754,88 +1785,88 @@ msgstr "不是字符类型"
...
@@ -1754,88 +1785,88 @@ msgstr "不是字符类型"
msgid "Encrypt field using Secret Key"
msgid "Encrypt field using Secret Key"
msgstr ""
msgstr ""
#: common/forms.py:6
1
#: common/forms.py:6
4
msgid "Current SITE URL"
msgid "Current SITE URL"
msgstr "当前站点URL"
msgstr "当前站点URL"
#: common/forms.py:6
5
#: common/forms.py:6
8
msgid "User Guide URL"
msgid "User Guide URL"
msgstr "用户向导URL"
msgstr "用户向导URL"
#: common/forms.py:6
6
#: common/forms.py:6
9
msgid "User first login update profile done redirect to it"
msgid "User first login update profile done redirect to it"
msgstr "用户第一次登录,修改profile后重定向到地址"
msgstr "用户第一次登录,修改profile后重定向到地址"
#: common/forms.py:
69
#: common/forms.py:
72
msgid "Email Subject Prefix"
msgid "Email Subject Prefix"
msgstr "Email主题前缀"
msgstr "Email主题前缀"
#: common/forms.py:7
6
#: common/forms.py:7
9
msgid "SMTP host"
msgid "SMTP host"
msgstr "SMTP主机"
msgstr "SMTP主机"
#: common/forms.py:
78
#: common/forms.py:
81
msgid "SMTP port"
msgid "SMTP port"
msgstr "SMTP端口"
msgstr "SMTP端口"
#: common/forms.py:8
0
#: common/forms.py:8
3
msgid "SMTP user"
msgid "SMTP user"
msgstr "SMTP账号"
msgstr "SMTP账号"
#: common/forms.py:8
3
#: common/forms.py:8
6
msgid "SMTP password"
msgid "SMTP password"
msgstr "SMTP密码"
msgstr "SMTP密码"
#: common/forms.py:8
4
#: common/forms.py:8
7
msgid "Some provider use token except password"
msgid "Some provider use token except password"
msgstr "一些邮件提供商需要输入的是Token"
msgstr "一些邮件提供商需要输入的是Token"
#: common/forms.py:
87 common/forms.py:125
#: common/forms.py:
90 common/forms.py:128
msgid "Use SSL"
msgid "Use SSL"
msgstr "使用SSL"
msgstr "使用SSL"
#: common/forms.py:
88
#: common/forms.py:
91
msgid "If SMTP port is 465, may be select"
msgid "If SMTP port is 465, may be select"
msgstr "如果SMTP端口是465,通常需要启用SSL"
msgstr "如果SMTP端口是465,通常需要启用SSL"
#: common/forms.py:9
1
#: common/forms.py:9
4
msgid "Use TLS"
msgid "Use TLS"
msgstr "使用TLS"
msgstr "使用TLS"
#: common/forms.py:9
2
#: common/forms.py:9
5
msgid "If SMTP port is 587, may be select"
msgid "If SMTP port is 587, may be select"
msgstr "如果SMTP端口是587,通常需要启用TLS"
msgstr "如果SMTP端口是587,通常需要启用TLS"
#: common/forms.py:
98
#: common/forms.py:
101
msgid "LDAP server"
msgid "LDAP server"
msgstr "LDAP地址"
msgstr "LDAP地址"
#: common/forms.py:10
1
#: common/forms.py:10
4
msgid "Bind DN"
msgid "Bind DN"
msgstr "绑定DN"
msgstr "绑定DN"
#: common/forms.py:1
08
#: common/forms.py:1
11
msgid "User OU"
msgid "User OU"
msgstr "用户OU"
msgstr "用户OU"
#: common/forms.py:1
09
#: common/forms.py:1
12
msgid "Use | split User OUs"
msgid "Use | split User OUs"
msgstr "使用|分隔各OU"
msgstr "使用|分隔各OU"
#: common/forms.py:11
2
#: common/forms.py:11
5
msgid "User search filter"
msgid "User search filter"
msgstr "用户过滤器"
msgstr "用户过滤器"
#: common/forms.py:11
3
#: common/forms.py:11
6
#, python-format
#, python-format
msgid "Choice may be (cn|uid|sAMAccountName)=%(user)s)"
msgid "Choice may be (cn|uid|sAMAccountName)=%(user)s)"
msgstr "可能的选项是(cn或uid或sAMAccountName=%(user)s)"
msgstr "可能的选项是(cn或uid或sAMAccountName=%(user)s)"
#: common/forms.py:11
6
#: common/forms.py:11
9
msgid "User attr map"
msgid "User attr map"
msgstr "LDAP属性映射"
msgstr "LDAP属性映射"
#: common/forms.py:1
18
#: common/forms.py:1
21
msgid ""
msgid ""
"User attr map present how to map LDAP user attr to jumpserver, username,name,"
"User attr map present how to map LDAP user attr to jumpserver, username,name,"
"email is jumpserver attr"
"email is jumpserver attr"
...
@@ -1843,125 +1874,125 @@ msgstr ""
...
@@ -1843,125 +1874,125 @@ msgstr ""
"用户属性映射代表怎样将LDAP中用户属性映射到jumpserver用户上,username, name,"
"用户属性映射代表怎样将LDAP中用户属性映射到jumpserver用户上,username, name,"
"email 是jumpserver的属性"
"email 是jumpserver的属性"
#: common/forms.py:1
27
#: common/forms.py:1
30
msgid "Enable LDAP auth"
msgid "Enable LDAP auth"
msgstr "启用LDAP认证"
msgstr "启用LDAP认证"
#: common/forms.py:13
6
#: common/forms.py:13
9
msgid "List sort by"
msgid "List sort by"
msgstr "资产列表排序"
msgstr "资产列表排序"
#: common/forms.py:1
39
#: common/forms.py:1
42
msgid "Heartbeat interval"
msgid "Heartbeat interval"
msgstr "心跳间隔"
msgstr "心跳间隔"
#: common/forms.py:1
39
ops/models/adhoc.py:38
#: common/forms.py:1
42
ops/models/adhoc.py:38
msgid "Units: seconds"
msgid "Units: seconds"
msgstr "单位: 秒"
msgstr "单位: 秒"
#: common/forms.py:14
2
#: common/forms.py:14
5
msgid "Password auth"
msgid "Password auth"
msgstr "密码认证"
msgstr "密码认证"
#: common/forms.py:14
5
#: common/forms.py:14
8
msgid "Public key auth"
msgid "Public key auth"
msgstr "密钥认证"
msgstr "密钥认证"
#: common/forms.py:1
48
common/templates/common/terminal_setting.html:68
#: common/forms.py:1
51
common/templates/common/terminal_setting.html:68
#: terminal/forms.py:30 terminal/models.py:22
#: terminal/forms.py:30 terminal/models.py:22
msgid "Command storage"
msgid "Command storage"
msgstr "命令存储"
msgstr "命令存储"
#: common/forms.py:1
49
#: common/forms.py:1
52
msgid ""
msgid ""
"Set terminal storage setting, `default` is the using as default,You can set "
"Set terminal storage setting, `default` is the using as default,You can set "
"other storage and some terminal using"
"other storage and some terminal using"
msgstr "设置终端命令存储,default是默认用的存储方式"
msgstr "设置终端命令存储,default是默认用的存储方式"
#: common/forms.py:15
4
common/templates/common/terminal_setting.html:86
#: common/forms.py:15
7
common/templates/common/terminal_setting.html:86
#: terminal/forms.py:35 terminal/models.py:23
#: terminal/forms.py:35 terminal/models.py:23
msgid "Replay storage"
msgid "Replay storage"
msgstr "录像存储"
msgstr "录像存储"
#: common/forms.py:15
5
#: common/forms.py:15
8
msgid ""
msgid ""
"Set replay storage setting, `default` is the using as default,You can set "
"Set replay storage setting, `default` is the using as default,You can set "
"other storage and some terminal using"
"other storage and some terminal using"
msgstr "设置终端录像存储,default是默认用的存储方式"
msgstr "设置终端录像存储,default是默认用的存储方式"
#: common/forms.py:16
5
#: common/forms.py:16
8
msgid "MFA Secondary certification"
msgid "MFA Secondary certification"
msgstr "MFA 二次认证"
msgstr "MFA 二次认证"
#: common/forms.py:1
67
#: common/forms.py:1
70
msgid ""
msgid ""
"After opening, the user login must use MFA secondary authentication (valid "
"After opening, the user login must use MFA secondary authentication (valid "
"for all users, including administrators)"
"for all users, including administrators)"
msgstr "开启后,用户登录必须使用MFA二次认证(对所有用户有效,包括管理员)"
msgstr "开启后,用户登录必须使用MFA二次认证(对所有用户有效,包括管理员)"
#: common/forms.py:17
4
#: common/forms.py:17
7
msgid "Limit the number of login failures"
msgid "Limit the number of login failures"
msgstr "限制登录失败次数"
msgstr "限制登录失败次数"
#: common/forms.py:1
79
#: common/forms.py:1
82
msgid "No logon interval"
msgid "No logon interval"
msgstr "禁止登录时间间隔"
msgstr "禁止登录时间间隔"
#: common/forms.py:18
1
#: common/forms.py:18
4
msgid ""
msgid ""
"Tip :(unit/minute) if the user has failed to log in for a limited number of "
"Tip :(unit/minute) if the user has failed to log in for a limited number of "
"times, no login is allowed during this time interval."
"times, no login is allowed during this time interval."
msgstr ""
msgstr ""
"提示: (单位: 分钟) 当用户登录失败次数达到限制后,那么在此时间间隔内禁止登录."
"提示: (单位: 分钟) 当用户登录失败次数达到限制后,那么在此时间间隔内禁止登录."
#: common/forms.py:1
87
#: common/forms.py:1
90
msgid "Connection max idle time"
msgid "Connection max idle time"
msgstr "SSH最大空闲时间"
msgstr "SSH最大空闲时间"
#: common/forms.py:1
89
#: common/forms.py:1
92
msgid ""
msgid ""
"If idle time more than it, disconnect connection(only ssh now) Unit: minute"
"If idle time more than it, disconnect connection(only ssh now) Unit: minute"
msgstr "提示: (单位: 分钟) 如果超过该配置没有操作,连接会被断开(仅ssh) "
msgstr "提示: (单位: 分钟) 如果超过该配置没有操作,连接会被断开(仅ssh) "
#: common/forms.py:19
5
#: common/forms.py:19
8
msgid "Password minimum length"
msgid "Password minimum length"
msgstr "密码最小长度 "
msgstr "密码最小长度 "
#: common/forms.py:20
1
#: common/forms.py:20
4
msgid "Must contain capital letters"
msgid "Must contain capital letters"
msgstr "必须包含大写字母"
msgstr "必须包含大写字母"
#: common/forms.py:20
3
#: common/forms.py:20
6
msgid ""
msgid ""
"After opening, the user password changes and resets must contain uppercase "
"After opening, the user password changes and resets must contain uppercase "
"letters"
"letters"
msgstr "开启后,用户密码修改、重置必须包含大写字母"
msgstr "开启后,用户密码修改、重置必须包含大写字母"
#: common/forms.py:2
09
#: common/forms.py:2
12
msgid "Must contain lowercase letters"
msgid "Must contain lowercase letters"
msgstr "必须包含小写字母"
msgstr "必须包含小写字母"
#: common/forms.py:21
0
#: common/forms.py:21
3
msgid ""
msgid ""
"After opening, the user password changes and resets must contain lowercase "
"After opening, the user password changes and resets must contain lowercase "
"letters"
"letters"
msgstr "开启后,用户密码修改、重置必须包含小写字母"
msgstr "开启后,用户密码修改、重置必须包含小写字母"
#: common/forms.py:21
6
#: common/forms.py:21
9
msgid "Must contain numeric characters"
msgid "Must contain numeric characters"
msgstr "必须包含数字字符"
msgstr "必须包含数字字符"
#: common/forms.py:2
17
#: common/forms.py:2
20
msgid ""
msgid ""
"After opening, the user password changes and resets must contain numeric "
"After opening, the user password changes and resets must contain numeric "
"characters"
"characters"
msgstr "开启后,用户密码修改、重置必须包含数字字符"
msgstr "开启后,用户密码修改、重置必须包含数字字符"
#: common/forms.py:22
3
#: common/forms.py:22
6
msgid "Must contain special characters"
msgid "Must contain special characters"
msgstr "必须包含特殊字符"
msgstr "必须包含特殊字符"
#: common/forms.py:22
4
#: common/forms.py:22
7
msgid ""
msgid ""
"After opening, the user password changes and resets must contain special "
"After opening, the user password changes and resets must contain special "
"characters"
"characters"
...
@@ -2034,7 +2065,7 @@ msgid "Special char not allowed"
...
@@ -2034,7 +2065,7 @@ msgid "Special char not allowed"
msgstr "不能包含特殊字符"
msgstr "不能包含特殊字符"
#: common/views.py:19 common/views.py:45 common/views.py:71 common/views.py:101
#: common/views.py:19 common/views.py:45 common/views.py:71 common/views.py:101
#: common/views.py:129 templates/_nav.html:1
0
6
#: common/views.py:129 templates/_nav.html:1
1
6
msgid "Settings"
msgid "Settings"
msgstr "系统设置"
msgstr "系统设置"
...
@@ -2106,6 +2137,7 @@ msgid "Become"
...
@@ -2106,6 +2137,7 @@ msgid "Become"
msgstr "Become"
msgstr "Become"
#: ops/models/adhoc.py:163 users/templates/users/user_group_detail.html:59
#: ops/models/adhoc.py:163 users/templates/users/user_group_detail.html:59
#: xpack/plugins/cloud/templates/cloud/account_detail.html:64
#: xpack/plugins/orgs/templates/orgs/org_detail.html:56
#: xpack/plugins/orgs/templates/orgs/org_detail.html:56
msgid "Create by"
msgid "Create by"
msgstr "创建者"
msgstr "创建者"
...
@@ -2277,6 +2309,7 @@ msgid "Versions"
...
@@ -2277,6 +2309,7 @@ msgid "Versions"
msgstr "版本"
msgstr "版本"
#: ops/templates/ops/task_list.html:71
#: ops/templates/ops/task_list.html:71
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:52
msgid "Run"
msgid "Run"
msgstr "执行"
msgstr "执行"
...
@@ -2297,7 +2330,7 @@ msgstr "任务列表"
...
@@ -2297,7 +2330,7 @@ msgstr "任务列表"
msgid "Task run history"
msgid "Task run history"
msgstr "执行历史"
msgstr "执行历史"
#: orgs/mixins.py:7
9
orgs/models.py:24
#: orgs/mixins.py:7
8
orgs/models.py:24
msgid "Organization"
msgid "Organization"
msgstr "组织管理"
msgstr "组织管理"
...
@@ -2542,7 +2575,7 @@ msgstr "命令记录"
...
@@ -2542,7 +2575,7 @@ msgstr "命令记录"
msgid "Web terminal"
msgid "Web terminal"
msgstr "Web终端"
msgstr "Web终端"
#: templates/_nav.html:53
#: templates/_nav.html:53
templates/_nav_user.html:19
msgid "File manager"
msgid "File manager"
msgstr "文件管理"
msgstr "文件管理"
...
@@ -2561,6 +2594,14 @@ msgstr "作业中心"
...
@@ -2561,6 +2594,14 @@ msgstr "作业中心"
msgid "XPack"
msgid "XPack"
msgstr ""
msgstr ""
#: templates/_nav.html:102 xpack/plugins/cloud/views.py:26
msgid "Account list"
msgstr "账户列表"
#: templates/_nav.html:103
msgid "Sync instance"
msgstr "同步实例"
#: templates/_pagination.html:59
#: templates/_pagination.html:59
msgid ""
msgid ""
"Displays the results of items _START_ to _END_; A total of _TOTAL_ entries"
"Displays the results of items _START_ to _END_; A total of _TOTAL_ entries"
...
@@ -3146,7 +3187,8 @@ msgstr "用户名/密码 校验失败"
...
@@ -3146,7 +3187,8 @@ msgstr "用户名/密码 校验失败"
msgid "MFA authentication failed"
msgid "MFA authentication failed"
msgstr "MFA 认证失败"
msgstr "MFA 认证失败"
#: users/models/authentication.py:67
#: users/models/authentication.py:67 xpack/plugins/cloud/models.py:184
#: xpack/plugins/cloud/models.py:198
msgid "Failed"
msgid "Failed"
msgstr "失败"
msgstr "失败"
...
@@ -3226,6 +3268,9 @@ msgstr "安全令牌验证"
...
@@ -3226,6 +3268,9 @@ msgstr "安全令牌验证"
#: users/templates/users/_base_otp.html:44 users/templates/users/_user.html:13
#: users/templates/users/_base_otp.html:44 users/templates/users/_user.html:13
#: users/templates/users/user_profile_update.html:51
#: users/templates/users/user_profile_update.html:51
#: xpack/plugins/cloud/models.py:51 xpack/plugins/cloud/models.py:133
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:59
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:13
msgid "Account"
msgid "Account"
msgstr "账户"
msgstr "账户"
...
@@ -3593,28 +3638,23 @@ msgid "Add user"
...
@@ -3593,28 +3638,23 @@ msgid "Add user"
msgstr "添加用户"
msgstr "添加用户"
#: users/templates/users/user_group_list.html:5 users/views/group.py:45
#: users/templates/users/user_group_list.html:5 users/views/group.py:45
#: xpack/templates/orgs/org_list.html:5
msgid "Create user group"
msgid "Create user group"
msgstr "创建用户组"
msgstr "创建用户组"
#: users/templates/users/user_group_list.html:82
#: users/templates/users/user_group_list.html:82
#: xpack/templates/orgs/org_list.html:82
msgid "This will delete the selected groups !!!"
msgid "This will delete the selected groups !!!"
msgstr "删除选择组"
msgstr "删除选择组"
#: users/templates/users/user_group_list.html:91
#: users/templates/users/user_group_list.html:91
#: xpack/templates/orgs/org_list.html:90
msgid "UserGroups Deleted."
msgid "UserGroups Deleted."
msgstr "用户组删除"
msgstr "用户组删除"
#: users/templates/users/user_group_list.html:92
#: users/templates/users/user_group_list.html:92
#: users/templates/users/user_group_list.html:97
#: users/templates/users/user_group_list.html:97
#: xpack/templates/orgs/org_list.html:91 xpack/templates/orgs/org_list.html:96
msgid "UserGroups Delete"
msgid "UserGroups Delete"
msgstr "用户组删除"
msgstr "用户组删除"
#: users/templates/users/user_group_list.html:96
#: users/templates/users/user_group_list.html:96
#: xpack/templates/orgs/org_list.html:95
msgid "UserGroup Deleting failed."
msgid "UserGroup Deleting failed."
msgstr "用户组删除失败"
msgstr "用户组删除失败"
...
@@ -3986,16 +4026,281 @@ msgstr "MFA 解绑成功"
...
@@ -3986,16 +4026,281 @@ msgstr "MFA 解绑成功"
msgid "MFA disable success, return login page"
msgid "MFA disable success, return login page"
msgstr "MFA 解绑成功,返回登录页面"
msgstr "MFA 解绑成功,返回登录页面"
#: xpack/plugins/cloud/api.py:60 xpack/plugins/cloud/providers/base.py:83
msgid "Account unavailable"
msgstr "账户无效"
#: xpack/plugins/cloud/forms.py:12
msgid "Access Key ID"
msgstr ""
#: xpack/plugins/cloud/forms.py:13
msgid "Access Key Secret"
msgstr ""
#: xpack/plugins/cloud/forms.py:58
msgid "Select account"
msgstr "选择账户"
#: xpack/plugins/cloud/forms.py:64
msgid "Select regions"
msgstr "选择地域"
#: xpack/plugins/cloud/forms.py:70
msgid "Select instances"
msgstr "选择实例"
#: xpack/plugins/cloud/forms.py:76
msgid "Select node"
msgstr "选择节点"
#: xpack/plugins/cloud/forms.py:82 xpack/plugins/orgs/forms.py:18
msgid "Select admins"
msgstr "选择管理员"
#: xpack/plugins/cloud/meta.py:9 xpack/plugins/cloud/views.py:25
#: xpack/plugins/cloud/views.py:41 xpack/plugins/cloud/views.py:57
#: xpack/plugins/cloud/views.py:71 xpack/plugins/cloud/views.py:84
#: xpack/plugins/cloud/views.py:100 xpack/plugins/cloud/views.py:121
#: xpack/plugins/cloud/views.py:136 xpack/plugins/cloud/views.py:179
msgid "Cloud center"
msgstr "云管中心"
#: xpack/plugins/cloud/models.py:30
msgid "Aliyun"
msgstr "阿里云"
#: xpack/plugins/cloud/models.py:31
msgid "AWS (China)"
msgstr "AWS (中国)"
#: xpack/plugins/cloud/models.py:32
msgid "AWS (International)"
msgstr "AWS (国际)"
#: xpack/plugins/cloud/models.py:35
msgid "Available"
msgstr "有效"
#: xpack/plugins/cloud/models.py:36
msgid "Unavailable"
msgstr "无效"
#: xpack/plugins/cloud/models.py:41
#: xpack/plugins/cloud/templates/cloud/account_detail.html:56
#: xpack/plugins/cloud/templates/cloud/account_list.html:13
msgid "Provider"
msgstr "云服务商"
#: xpack/plugins/cloud/models.py:42
msgid "Access key id"
msgstr ""
#: xpack/plugins/cloud/models.py:43
msgid "Access key secret"
msgstr ""
#: xpack/plugins/cloud/models.py:44
#: xpack/plugins/cloud/templates/cloud/account_detail.html:60
#: xpack/plugins/cloud/templates/cloud/account_list.html:14
msgid "Validity"
msgstr "账户状态"
#: xpack/plugins/cloud/models.py:134
msgid "Regions"
msgstr "地域"
#: xpack/plugins/cloud/models.py:135
msgid "Instances"
msgstr "实例"
#: xpack/plugins/cloud/models.py:139
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:75
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:17
msgid "Date last sync"
msgstr "最后同步日期"
#: xpack/plugins/cloud/models.py:145 xpack/plugins/cloud/models.py:189
msgid "Sync instance task"
msgstr "同步实例任务"
#: xpack/plugins/cloud/models.py:185 xpack/plugins/cloud/models.py:199
msgid "Succeed"
msgstr "成功"
#: xpack/plugins/cloud/models.py:186
msgid "Partial succeed"
msgstr ""
#: xpack/plugins/cloud/models.py:190
msgid "Result"
msgstr "结果"
#: xpack/plugins/cloud/models.py:193 xpack/plugins/cloud/models.py:209
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:71
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:68
msgid "Date sync"
msgstr "同步日期"
#: xpack/plugins/cloud/models.py:200
msgid "Exist"
msgstr "存在"
#: xpack/plugins/cloud/models.py:203
msgid "Sync task"
msgstr "同步任务"
#: xpack/plugins/cloud/models.py:204
msgid "Sync instance task history"
msgstr "同步实例任务历史"
#: xpack/plugins/cloud/models.py:205
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:91
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:63
msgid "Instance"
msgstr "实例"
#: xpack/plugins/cloud/models.py:206
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:83
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:64
msgid "Region"
msgstr "地域"
#: xpack/plugins/cloud/providers/base.py:73
msgid "任务执行开始: {}"
msgstr ""
#: xpack/plugins/cloud/providers/base.py:77
msgid "检测账户有效性: {}"
msgstr ""
#: xpack/plugins/cloud/providers/base.py:80
msgid "账户无效!"
msgstr ""
#: xpack/plugins/cloud/providers/base.py:85
msgid "账户有效!"
msgstr ""
#: xpack/plugins/cloud/providers/base.py:91
msgid "任务执行结束!"
msgstr ""
#: xpack/plugins/cloud/providers/base.py:93
msgid ""
"查看任务详细信息路径: XPack -> 云管中心 -> 任务列表 -> 任务详情(点击任务名"
"称) -> 查看同步历史列表/实例列表"
msgstr ""
#: xpack/plugins/cloud/providers/base.py:130
msgid "同步实例列表: {}"
msgstr ""
#: xpack/plugins/cloud/providers/base.py:139
msgid "同步地域列表: {}"
msgstr ""
#: xpack/plugins/cloud/providers/base.py:143
msgid "地域: {}"
msgstr ""
#: xpack/plugins/cloud/providers/base.py:154
msgid "实例: {}, 地域: {}"
msgstr ""
#: xpack/plugins/cloud/providers/base.py:160
msgid "正在创建资产..."
msgstr ""
#: xpack/plugins/cloud/templates/cloud/account_detail.html:22
#: xpack/plugins/cloud/views.py:72
msgid "Account detail"
msgstr "账户详情"
#: xpack/plugins/cloud/templates/cloud/account_list.html:5
#: xpack/plugins/cloud/views.py:42
msgid "Create account"
msgstr "创建账户"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_create.html:91
msgid "Loading..."
msgstr ""
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_create.html:106
msgid "Load failed"
msgstr "加载失败"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:22
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:25
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:23
#: xpack/plugins/cloud/views.py:122
msgid "Sync task detail"
msgstr "同步任务详情"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:25
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:28
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:26
#: xpack/plugins/cloud/views.py:137
msgid "Sync task history"
msgstr "同步历史列表"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:28
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:31
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:29
#: xpack/plugins/cloud/views.py:180
msgid "Sync instance list"
msgstr "同步实例列表"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:65
msgid "Total count"
msgstr "总数"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:66
msgid "Succeed count"
msgstr "成功"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:67
msgid "Failed count"
msgstr "失败"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:68
msgid "Exist count"
msgstr "存在"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:5
msgid "Create sync instance task"
msgstr "创建同步实例任务"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:14
msgid "Run count"
msgstr "执行次数"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:15
msgid "Instance count"
msgstr "实例个数"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:92
msgid "Sync success"
msgstr "同步成功"
#: xpack/plugins/cloud/views.py:58
msgid "Update account"
msgstr "更新账户"
#: xpack/plugins/cloud/views.py:85
msgid "Sync instance task list"
msgstr "同步实例任务列表"
#: xpack/plugins/cloud/views.py:101
msgid "Create sync Instance task"
msgstr "创建同步实例任务"
#: xpack/plugins/orgs/forms.py:14
#: xpack/plugins/orgs/forms.py:14
#: xpack/plugins/orgs/templates/orgs/org_detail.html:76
#: xpack/plugins/orgs/templates/orgs/org_detail.html:76
#: xpack/plugins/orgs/templates/orgs/org_list.html:13
#: xpack/plugins/orgs/templates/orgs/org_list.html:13
msgid "Admin"
msgid "Admin"
msgstr "管理员"
msgstr "管理员"
#: xpack/plugins/orgs/forms.py:18
msgid "Select admins"
msgstr "选择管理员"
#: xpack/plugins/orgs/meta.py:8
#: xpack/plugins/orgs/meta.py:8
msgid "Organizations"
msgid "Organizations"
msgstr "组织管理"
msgstr "组织管理"
...
@@ -4034,6 +4339,18 @@ msgstr "创建组织"
...
@@ -4034,6 +4339,18 @@ msgstr "创建组织"
msgid "Update org"
msgid "Update org"
msgstr "更新组织"
msgstr "更新组织"
#~ msgid "Sync instance task detail"
#~ msgstr "同步实例任务详情"
#~ msgid "Sync task instance"
#~ msgstr "同步实例列表"
#~ msgid "Sync instance task instance"
#~ msgstr "同步实例任务实例"
#~ msgid "Get sync task error"
#~ msgstr "获取同步任务"
#~ msgid ""
#~ msgid ""
#~ "Are you sure to remove authentication information for the system user ?"
#~ "Are you sure to remove authentication information for the system user ?"
#~ msgstr "你确定清除该系统用户的认证信息吗 ?"
#~ msgstr "你确定清除该系统用户的认证信息吗 ?"
...
...
apps/orgs/mixins.py
View file @
09fbd3a5
...
@@ -4,7 +4,6 @@
...
@@ -4,7 +4,6 @@
from
werkzeug.local
import
Local
from
werkzeug.local
import
Local
from
django.db
import
models
from
django.db
import
models
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.db.models
import
Q
from
django.shortcuts
import
redirect
from
django.shortcuts
import
redirect
from
django.forms
import
ModelForm
from
django.forms
import
ModelForm
from
django.http.response
import
HttpResponseForbidden
from
django.http.response
import
HttpResponseForbidden
...
...
apps/perms/api.py
View file @
09fbd3a5
...
@@ -96,7 +96,7 @@ class UserGrantedNodesApi(ListAPIView):
...
@@ -96,7 +96,7 @@ class UserGrantedNodesApi(ListAPIView):
"""
"""
查询用户授权的所有节点的API, 如果是超级用户或者是 app,切换到root org
查询用户授权的所有节点的API, 如果是超级用户或者是 app,切换到root org
"""
"""
permission_classes
=
(
IsOrgAdmin
,)
permission_classes
=
(
IsOrgAdmin
OrAppUser
,)
serializer_class
=
NodeSerializer
serializer_class
=
NodeSerializer
def
change_org_if_need
(
self
):
def
change_org_if_need
(
self
):
...
...
apps/static/js/jumpserver.js
View file @
09fbd3a5
...
@@ -145,7 +145,14 @@ function activeNav() {
...
@@ -145,7 +145,14 @@ function activeNav() {
var
resource
=
url_array
[
2
];
var
resource
=
url_array
[
2
];
if
(
app
===
''
){
if
(
app
===
''
){
$
(
'#index'
).
addClass
(
'active'
);
$
(
'#index'
).
addClass
(
'active'
);
}
else
{
}
else
if
(
app
===
'xpack'
)
{
var
item
=
url_array
[
3
];
$
(
"#"
+
app
).
addClass
(
'active'
);
$
(
'#'
+
app
+
' #'
+
resource
).
addClass
(
'active'
);
$
(
'#'
+
app
+
' #'
+
resource
+
' #'
+
item
+
' a'
).
css
(
'color'
,
'#ffffff'
);
}
else
{
$
(
"#"
+
app
).
addClass
(
'active'
);
$
(
"#"
+
app
).
addClass
(
'active'
);
$
(
'#'
+
app
+
' #'
+
resource
).
addClass
(
'active'
);
$
(
'#'
+
app
+
' #'
+
resource
).
addClass
(
'active'
);
}
}
...
...
apps/templates/_nav.html
View file @
09fbd3a5
...
@@ -95,7 +95,17 @@
...
@@ -95,7 +95,17 @@
</a>
</a>
<ul
class=
"nav nav-second-level"
>
<ul
class=
"nav nav-second-level"
>
{% for plugin in XPACK_PLUGINS %}
{% for plugin in XPACK_PLUGINS %}
<li
id=
"{{ plugin.name }}"
><a
href=
"{{ plugin.endpoint }}"
>
{% trans plugin.verbose_name %}
</a></li>
{% ifequal plugin.name 'cloud'%}
<li
id=
"{{ plugin.name }}"
>
<a
href=
"#"
><span
class=
"nav-label"
>
{% trans plugin.verbose_name %}
</span><span
class=
"fa arrow"
></span></a>
<ul
class=
"nav nav-third-level"
>
<li
id=
"account"
><a
href=
"{% url 'xpack:cloud:account-list' %}"
>
{% trans 'Account list' %}
</a></li>
<li
id=
"sync-instance-task"
><a
href=
"{% url 'xpack:cloud:sync-instance-task-list' %}"
>
{% trans 'Sync instance' %}
</a></li>
</ul>
</li>
{% else %}
<li
id=
"{{ plugin.name }}"
><a
href=
"{{ plugin.endpoint }}"
>
{% trans plugin.verbose_name %}
</a></li>
{% endifequal %}
{% endfor %}
{% endfor %}
</ul>
</ul>
</li>
</li>
...
...
apps/templates/_nav_user.html
View file @
09fbd3a5
...
@@ -9,8 +9,13 @@
...
@@ -9,8 +9,13 @@
<i
class=
"fa fa-user"
style=
"width: 14px"
></i>
<span
class=
"nav-label"
>
{% trans 'Profile' %}
</span><span
class=
"label label-info pull-right"
></span>
<i
class=
"fa fa-user"
style=
"width: 14px"
></i>
<span
class=
"nav-label"
>
{% trans 'Profile' %}
</span><span
class=
"label label-info pull-right"
></span>
</a>
</a>
</li>
</li>
<li
>
<li>
<a
href=
"{% url 'terminal:web-terminal' %}"
target=
"_blank"
><i
class=
"fa fa-window-maximize"
style=
"width: 14px"
></i>
<a
href=
"{% url 'terminal:web-terminal' %}"
target=
"_blank"
><i
class=
"fa fa-window-maximize"
style=
"width: 14px"
></i>
<span
class=
"nav-label"
>
{% trans 'Web terminal' %}
</span>
<span
class=
"nav-label"
>
{% trans 'Web terminal' %}
</span>
</a>
</a>
</li>
<li>
<a
href=
"{% url 'terminal:web-sftp' %}"
target=
"_blank"
><i
class=
"fa fa-file"
style=
"width: 14px"
></i>
<span
class=
"nav-label"
>
{% trans 'File manager' %}
</span>
</a>
</li>
</li>
\ No newline at end of file
requirements/requirements.txt
View file @
09fbd3a5
...
@@ -72,3 +72,5 @@ vine==1.1.4
...
@@ -72,3 +72,5 @@ vine==1.1.4
drf-yasg==1.9.1
drf-yasg==1.9.1
Werkzeug==0.14.1
Werkzeug==0.14.1
drf-nested-routers==0.90.2
drf-nested-routers==0.90.2
aliyun-python-sdk-core-v3==2.9.1
aliyun-python-sdk-ecs==4.10.1
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