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
b9e2c9aa
Commit
b9e2c9aa
authored
Feb 09, 2015
by
guanghongwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改sudo授权
parent
75979e39
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
476 additions
and
8 deletions
+476
-8
urls.py
jperm/urls.py
+3
-0
views.py
jperm/views.py
+91
-6
style.css
static/css/style.css
+1
-1
sudo_add.html
templates/jperm/sudo_add.html
+150
-0
sudo_cmd_add.html
templates/jperm/sudo_cmd_add.html
+118
-0
sudo_cmd_list.html
templates/jperm/sudo_cmd_list.html
+111
-0
sudo_list.html
templates/jperm/sudo_list.html
+0
-0
nav.html
templates/nav.html
+2
-1
No files found.
jperm/urls.py
View file @
b9e2c9aa
...
...
@@ -13,4 +13,7 @@ urlpatterns = patterns('jperm.views',
(
r'^perm_del/$'
,
'perm_del'
),
(
r'^perm_asset_detail/$'
,
'perm_asset_detail'
),
(
r'^sudo_list/$'
,
'sudo_list'
),
(
r'^sudo_add/$'
,
'sudo_add'
),
(
r'^cmd_add/$'
,
'cmd_add'
),
(
r'^cmd_list/$'
,
'cmd_list'
),
)
jperm/views.py
View file @
b9e2c9aa
...
...
@@ -4,8 +4,9 @@ from django.shortcuts import render_to_response
from
django.http
import
HttpResponseRedirect
,
HttpResponse
from
juser.models
import
User
,
UserGroup
from
jasset.models
import
Asset
,
BisGroup
from
jperm.models
import
Perm
,
SudoPerm
from
jperm.models
import
Perm
,
SudoPerm
,
CmdGroup
from
django.core.paginator
import
Paginator
,
EmptyPage
,
InvalidPage
from
django.db.models
import
Q
def
perm_group_update
(
user_group_name
=
''
,
user_group_id
=
''
,
asset_groups_name
=
''
,
asset_groups_id
=
''
):
...
...
@@ -137,23 +138,107 @@ def perm_asset_detail(request):
return
render_to_response
(
'jperm/perm_asset_detail.html'
,
locals
())
def
user_asset_cmd_groups_get
(
user_groups_select
,
asset_groups_select
,
cmd_groups_select
):
user_groups_select_list
=
[]
asset_groups_select_list
=
[]
cmd_groups_select_list
=
[]
for
user_group_id
in
user_groups_select
:
user_groups_select_list
.
append
(
UserGroup
.
objects
.
get
(
id
=
user_group_id
))
for
asset_group_id
in
asset_groups_select
:
asset_groups_select_list
.
append
(
BisGroup
.
objects
.
get
(
id
=
asset_group_id
))
for
cmd_group_id
in
cmd_groups_select
:
cmd_groups_select_list
.
append
(
CmdGroup
.
objects
.
get
(
id
=
cmd_group_id
))
return
user_groups_select_list
,
asset_groups_select_list
,
cmd_groups_select_list
def
sudo_db_add
(
user_groups_select
,
asset_groups_select
,
cmd_groups_select
,
comment
):
user_groups_select_list
,
asset_groups_select_list
,
cmd_groups_select_list
=
\
user_asset_cmd_groups_get
(
user_groups_select
,
asset_groups_select
,
cmd_groups_select
)
sudo_perm
=
SudoPerm
(
comment
=
comment
)
sudo_perm
.
save
()
sudo_perm
.
user_group
=
user_groups_select_list
sudo_perm
.
asset_group
=
asset_groups_select_list
sudo_perm
.
cmd_group
=
cmd_groups_select_list
def
sudo_ldap_add
(
user_groups_select
,
asset_groups_select
,
cmd_groups_select
):
user_groups_select_list
,
asset_groups_select_list
,
cmd_groups_select_list
=
\
user_asset_cmd_groups_get
(
user_groups_select
,
asset_groups_select
,
cmd_groups_select
)
def
sudo_add
(
request
):
header_title
,
path1
,
path2
=
u'Sudo授权 | Perm Sudo Add.'
,
u'jperm'
,
u'sudo_add'
user_groups
=
UserGroup
.
objects
.
filter
(
Q
(
type
=
'A'
)
|
Q
(
type
=
'P'
))
.
order_by
(
'type'
)
asset_groups
=
BisGroup
.
objects
.
all
()
.
order_by
(
'type'
)
cmd_groups
=
CmdGroup
.
objects
.
all
()
if
request
.
method
==
'POST'
:
user_groups_select
=
request
.
POST
.
getlist
(
'user_groups_select'
)
asset_groups_select
=
request
.
POST
.
getlist
(
'asset_groups_select'
)
cmd_groups_select
=
request
.
POST
.
getlist
(
'cmd_groups_select'
)
comment
=
request
.
POST
.
get
(
'comment'
,
''
)
sudo_db_add
(
user_groups_select
,
asset_groups_select
,
cmd_groups_select
,
comment
)
msg
=
'添加成功'
return
render_to_response
(
'jperm/sudo_add.html'
,
locals
())
def
sudo_list
(
request
):
header_title
,
path1
,
path2
=
u'Sudo授权 | Perm Sudo Detail.'
,
u'jperm'
,
u'sudo_list'
sudo_perms
=
contact_list
=
SudoPerm
.
objects
.
all
()
users
=
contact_list2
=
User
.
objects
.
all
()
.
order_by
(
'id'
)
p
=
paginator
=
Paginator
(
contact_list
,
10
)
sudo_perms
=
contact_list2
=
SudoPerm
.
objects
.
all
()
p2
=
paginator2
=
Paginator
(
contact_list2
,
10
)
user_groups
=
UserGroup
.
objects
.
filter
(
Q
(
type
=
'A'
)
|
Q
(
type
=
'P'
))
asset_groups
=
BisGroup
.
objects
.
all
()
cmd_groups
=
CmdGroup
.
objects
.
all
()
try
:
page
=
int
(
request
.
GET
.
get
(
'page'
,
'1'
))
except
ValueError
:
page
=
1
try
:
contacts
=
paginator
.
page
(
page
)
contacts2
=
paginator2
.
page
(
page
)
except
(
EmptyPage
,
InvalidPage
):
contacts
=
paginator
.
page
(
paginator
.
num_pages
)
contacts2
=
paginator2
.
page
(
paginator2
.
num_pages
)
return
render_to_response
(
'jperm/sudo_list.html'
,
locals
())
def
cmd_add
(
request
):
header_title
,
path1
,
path2
=
u'sudo命令添加 | Sudo Cmd Add.'
,
u'jperm'
,
u'sudo_cmd_add'
if
request
.
method
==
'POST'
:
name
=
request
.
POST
.
get
(
'name'
)
cmd
=
','
.
join
(
request
.
POST
.
get
(
'cmd'
)
.
split
())
comment
=
request
.
POST
.
get
(
'comment'
)
CmdGroup
.
objects
.
create
(
name
=
name
,
cmd
=
cmd
,
comment
=
comment
)
msg
=
u'命令组添加成功'
return
render_to_response
(
'jperm/sudo_cmd_add.html'
,
locals
())
def
cmd_list
(
request
):
header_title
,
path1
,
path2
=
u'sudo命令查看 | Sudo Cmd List.'
,
u'jperm'
,
u'sudo_cmd_list'
cmd_groups
=
contact_list
=
CmdGroup
.
objects
.
all
()
p
=
paginator
=
Paginator
(
contact_list
,
10
)
try
:
page
=
int
(
request
.
GET
.
get
(
'page'
,
'1'
))
except
ValueError
:
page
=
1
try
:
contacts
=
paginator
.
page
(
page
)
except
(
EmptyPage
,
InvalidPage
):
contacts
=
paginator
.
page
(
paginator
.
num_pages
)
return
render_to_response
(
'jperm/sudo_cmd_list.html'
,
locals
())
static/css/style.css
View file @
b9e2c9aa
@import
url("//fonts.useso.com/css?family=Open+Sans:300,400,600,700&lang=en")
;
/*@import url("//fonts.useso.com/css?family=Open+Sans:300,400,600,700&lang=en");*/
h1
,
h2
,
...
...
templates/jperm/sudo_add.html
0 → 100644
View file @
b9e2c9aa
{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
Sudo授权
<small>
show sudo perm info.
</small>
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<form
id=
"sudoPerm"
method=
"post"
class=
"form-horizontal"
action=
""
>
{% if error %}
<div
class=
"alert alert-warning text-center"
>
{{ error }}
</div>
{% endif %}
{% if msg %}
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
{% endif %}
<div
class=
"row"
>
<div
class=
"col-sm-5"
><h4>
用户组
</h4>
<div>
<select
id=
"user_groups"
name=
"user_groups"
class=
"form-control"
size=
"5"
multiple
>
{% for user_group in user_groups %}
<option
value=
"{{ user_group.id }}"
>
{{ user_group.name }}
</option>
{% endfor %}
</select>
</div>
</div>
<div
class=
"col-sm-1"
>
<div
class=
"btn-group"
style=
"margin-top: 50px;"
>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('user_groups', 'user_groups_select')"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('user_groups_select', 'user_groups')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-5"
><h4>
授权用户组
</h4>
<div>
<select
id=
"user_groups_select"
name=
"user_groups_select"
class=
"form-control m-b"
size=
"5"
multiple
>
</select>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"row"
>
<div
class=
"col-sm-5"
><h4>
主机组
</h4>
<div>
<select
id=
"asset_groups"
name=
"asset_groups"
class=
"form-control m-b"
size=
"5"
multiple
>
{% for asset_group in asset_groups %}
<option
value=
"{{ asset_group.id }}"
>
{{ asset_group.name }}
</option>
{% endfor %}
</select>
</div>
</div>
<div
class=
"col-sm-1"
>
<div
class=
"btn-group"
style=
"margin-top: 50px;"
>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('asset_groups', 'asset_groups_select')"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('asset_groups_select', 'asset_groups')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-5"
><h4>
授权主机组
</h4>
<div>
<select
id=
"asset_groups_select"
name=
"asset_groups_select"
class=
"form-control m-b"
size=
"5"
multiple
>
</select>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"row"
>
<div
class=
"col-sm-5"
><h4>
命令组
</h4>
<div>
<select
id=
"cmd_groups"
name=
"cmd_groups"
class=
"form-control m-b"
size=
"5"
multiple
>
{% for cmd_group in cmd_groups %}
<option
value=
"{{ cmd_group.id }}"
>
{{ cmd_group.name }}
</option>
{% endfor %}
</select>
</div>
</div>
<div
class=
"col-sm-1"
>
<div
class=
"btn-group"
style=
"margin-top: 50px;"
>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('cmd_groups', 'cmd_groups_select')"
><i
class=
"fa fa-chevron-right"
></i></button>
<button
type=
"button"
class=
"btn btn-white"
onclick=
"move('cmd_groups_select', 'cmd_groups')"
><i
class=
"fa fa-chevron-left"
></i>
</button>
</div>
</div>
<div
class=
"col-sm-5"
><h4>
命令组
</h4>
<div>
<select
id=
"cmd_groups_select"
name=
"cmd_groups_select"
class=
"form-control m-b"
size=
"5"
multiple
>
</select>
</div>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"group_name"
class=
"col-sm-2 control-label"
>
备注
</label>
<div
class=
"col-sm-8"
>
<input
id=
"comment"
name=
"comment"
placeholder=
"备注说明"
type=
"text"
class=
"form-control"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"row"
>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<button
class=
"btn btn-white"
type=
"submit"
>
取消
</button>
<button
class=
"btn btn-primary"
type=
"submit"
onclick=
"javascript: (function(){$('#sudoPerm option').each(function(){$(this).prop('selected', true)})})()"
>
确认保存
</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
\ No newline at end of file
templates/jperm/sudo_cmd_add.html
0 → 100644
View file @
b9e2c9aa
{% extends 'base.html' %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
填写基本信息
<small>
Fill Cmd info.
</small></h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<form
id=
"cmdForm"
method=
"post"
class=
"form-horizontal"
action=
""
>
{% if error %}
<div
class=
"alert alert-warning text-center"
>
{{ error }}
</div>
{% endif %}
{% if msg %}
<div
class=
"alert alert-success text-center"
>
{{ msg }}
</div>
{% endif %}
<div
class=
"form-group"
>
<label
for=
"group_name"
class=
"col-sm-2 control-label"
>
组名
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<input
id=
"name"
name=
"name"
placeholder=
"Group name"
type=
"text"
class=
"form-control"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"group_type"
class=
"col-sm-2 control-label"
>
命令
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<textarea
id=
'cmd'
name=
'cmd'
class=
"form-control"
rows=
"10"
placeholder=
"命令"
></textarea>
<span
class=
"help-block m-b-none"
>
输入命令一行一个
</span>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<label
for=
"group_name"
class=
"col-sm-2 control-label"
>
备注
<span
class=
"red-fonts"
>
*
</span></label>
<div
class=
"col-sm-8"
>
<input
id=
"comment"
name=
"comment"
placeholder=
"备注说明"
type=
"text"
class=
"form-control"
>
</div>
</div>
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-2"
>
<button
class=
"btn btn-white"
type=
"reset"
>
取消
</button>
<button
id=
"submit_button"
class=
"btn btn-primary"
type=
"submit"
>
确认保存
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
'#groupForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
fields
:
{
"group_name"
:
{
rule
:
"required"
,
tip
:
"输入组名"
,
ok
:
""
,
msg
:
{
required
:
"必须填写!"
}
},
"group_type"
:
{
rule
:
"checked"
,
tip
:
"选择组类型"
,
ok
:
""
,
msg
:
{
required
:
"至少选择一个组!"
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
function
change_type
(
type
){
$
.
post
(
'/juser/group_add_ajax/'
,
{
'type'
:
type
},
function
(
data
){
$
(
'#users'
).
html
(
data
)
})
}
$
(
document
).
ready
(
function
(){
$
(
"#submit_button"
).
click
(
function
(){
$
(
'#users_selected option'
).
each
(
function
(){
$
(
this
).
prop
(
'selected'
,
true
)
})
})
})
</script>
{% endblock %}
\ No newline at end of file
templates/jperm/sudo_cmd_list.html
0 → 100644
View file @
b9e2c9aa
{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
查看分组
<small>
show group info.
</small>
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<div
class=
""
>
<a
target=
"_blank"
href=
"/jperm/cmd_add/"
class=
"btn btn-sm btn-primary "
>
添加
</a>
</div>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<tr>
<th
class=
"text-center"
>
组名
</th>
<th
class=
"text-center"
>
命令
</th>
<th
class=
"text-center"
>
备注
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</thead>
<tbody>
{% for group in contacts.object_list %}
<tr
class=
"gradeX"
>
<td
class=
"text-center"
>
{{ group.name }}
</td>
<td
class=
"text-center"
>
{{ group.cmd }}
</td>
<td
class=
"text-center"
>
{{ group.comment }}
</td>
<td
class=
"text-center"
>
<a
title=
"[ {{ group.name }} ] 成员信息"
href=
"../group_detail/?id={{ group.id }}"
class=
"iframe btn btn-xs btn-primary"
>
成员
</a>
<a
href=
"../group_edit/?id={{ group.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"../group_del/?id={{ group.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
<div
class=
"dataTables_info"
id=
"editable_info"
role=
"status"
aria-live=
"polite"
>
Showing {{ contacts.start_index }} to {{ contacts.end_index }} of {{ p.count }} entries
</div>
</div>
<div
class=
"col-sm-6"
>
<div
class=
"dataTables_paginate paging_simple_numbers"
id=
"editable_paginate"
>
<ul
class=
"pagination"
style=
"margin-top: 0; float: right"
>
{% if contacts.has_previous %}
<li
class=
"paginate_button previous"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"?page={{ contacts.previous_page_number }}"
>
Previous
</a>
</li>
{% else %}
<li
class=
"paginate_button previous disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_previous"
>
<a
href=
"#"
>
Previous
</a>
</li>
{% endif %}
{% for page in p.page_range %}
{% ifequal offset1 page %}
<li
class=
"paginate_button active"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% else %}
<li
class=
"paginate_button"
aria-controls=
"editable"
tabindex=
"0"
><a
href=
"?page={{ page }}"
title=
"第{{ page }}页"
>
{{ page }}
</a></li>
{% endifequal %}
{% endfor %}
{% if contacts.has_next %}
<li
class=
"paginate_button next"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"?page={{ contacts.next_page_number }}"
>
Next
</a>
</li>
{% else %}
<li
class=
"paginate_button next disabled"
aria-controls=
"editable"
tabindex=
"0"
id=
"editable_next"
>
<a
href=
"#"
>
Next
</a>
</li>
{% endif %}
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$
(
document
).
ready
(
function
(){
$
(
".iframe"
).
colorbox
({
iframe
:
true
,
width
:
"70%"
,
height
:
"70%"
});
});
</script>
{% endblock %}
\ No newline at end of file
templates/jperm/sudo_list.html
View file @
b9e2c9aa
This diff is collapsed.
Click to expand it.
templates/nav.html
View file @
b9e2c9aa
...
...
@@ -33,7 +33,8 @@
<a
href=
"#"
><i
class=
"fa fa-edit"
></i>
<span
class=
"nav-label"
>
授权管理
</span><span
class=
"fa arrow"
></span></a>
<ul
class=
"nav nav-second-level"
>
<li
id=
"perm_list"
><a
href=
"/jperm/perm_list/"
>
主机授权
</a></li>
<li
id=
"perm_sudo"
><a
href=
"/jperm/sudo_list/"
>
Sudo授权
</a></li>
<li
id=
"perm_sudo"
><a
href=
"/jperm/sudo_add/"
>
Sudo添加
</a></li>
<li
id=
"perm_sudo"
><a
href=
"/jperm/sudo_list/"
>
Sudo查看
</a></li>
</ul>
</li>
<li
id=
"jlog"
>
...
...
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