Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
94
Merge Requests
10
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
d9eac3b2
authored
Jun 02, 2014
by
Őry Máté
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dashboard: add GroupProfileUpdate view
parent
dc3697a4
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
98 additions
and
38 deletions
+98
-38
circle/dashboard/templates/dashboard/group-detail.html
+7
-0
circle/dashboard/urls.py
+3
-1
circle/dashboard/views.py
+88
-37
No files found.
circle/dashboard/templates/dashboard/group-detail.html
View file @
d9eac3b2
{% extends "dashboard/base.html" %}
{% load crispy_forms_tags %}
{% load i18n %}
{% block content %}
...
...
@@ -41,6 +42,12 @@
<div
class=
"col-md-12"
id=
"group-detail-pane"
>
<div
class=
"panel panel-default"
id=
"group-detail-panel"
>
<div
class=
"tab-content panel-body"
id=
"group-form-body"
>
<form
method=
"POST"
action=
"{% url "
dashboard
.
views
.
group-update
"
pk=
group.pk
%}"
>
{% csrf_token %}
{% crispy group_profile_form %}
</form>
<h3>
{% trans "User list"|capfirst %}
</h3>
<form
action=
""
method=
"post"
>
{% csrf_token %}
<table
class=
"table table-striped table-with-form-fields table-bordered"
id=
"group-detail-user-table"
>
...
...
circle/dashboard/urls.py
View file @
d9eac3b2
...
...
@@ -31,7 +31,7 @@ from .views import (
VmDetailVncTokenView
,
VmGraphView
,
VmList
,
VmMassDelete
,
VmMigrateView
,
VmRenewView
,
DiskRemoveView
,
get_disk_download_status
,
InterfaceDeleteView
,
GroupRemoveAclUserView
,
GroupRemoveAclGroupView
,
GroupRemoveUserView
,
GroupCreate
,
GroupCreate
,
GroupProfileUpdate
,
TemplateChoose
,
UserCreationView
,
)
...
...
@@ -117,6 +117,8 @@ urlpatterns = patterns(
name
=
'dashboard.views.node-graph'
),
url
(
r'^group/(?P<pk>\d+)/$'
,
GroupDetailView
.
as_view
(),
name
=
'dashboard.views.group-detail'
),
url
(
r'^group/(?P<pk>\d+)/update/$'
,
GroupProfileUpdate
.
as_view
(),
name
=
'dashboard.views.group-update'
),
url
(
r'^group/(?P<pk>\d+)/acl/$'
,
GroupAclUpdateView
.
as_view
(),
name
=
'dashboard.views.group-acl'
),
url
(
r'^notifications/$'
,
NotificationView
.
as_view
(),
...
...
circle/dashboard/views.py
View file @
d9eac3b2
...
...
@@ -55,7 +55,7 @@ from braces.views._access import AccessMixin
from
.forms
import
(
CircleAuthenticationForm
,
DiskAddForm
,
HostForm
,
LeaseForm
,
MyProfileForm
,
NodeForm
,
TemplateForm
,
TraitForm
,
VmCustomizeForm
,
GroupCreateForm
,
UserCreationForm
,
UserCreationForm
,
GroupProfileUpdateForm
,
CirclePasswordChangeForm
)
...
...
@@ -85,6 +85,44 @@ def search_user(keyword):
return
User
.
objects
.
get
(
email
=
keyword
)
class
GroupCodeMixin
(
object
):
@classmethod
def
get_available_group_codes
(
cls
,
request
):
newgroups
=
[]
if
saml_available
:
from
djangosaml2.cache
import
StateCache
,
IdentityCache
from
djangosaml2.conf
import
get_config
from
djangosaml2.views
import
_get_subject_id
from
saml2.client
import
Saml2Client
state
=
StateCache
(
request
.
session
)
conf
=
get_config
(
None
,
request
)
client
=
Saml2Client
(
conf
,
state_cache
=
state
,
identity_cache
=
IdentityCache
(
request
.
session
),
logger
=
logger
)
subject_id
=
_get_subject_id
(
request
.
session
)
identity
=
client
.
users
.
get_identity
(
subject_id
,
check_not_on_or_after
=
False
)
if
identity
:
attributes
=
identity
[
0
]
owneratrs
=
getattr
(
settings
,
'SAML_GROUP_OWNER_ATTRIBUTES'
,
[])
groups
=
[]
for
i
in
owneratrs
:
try
:
groups
+=
attributes
[
i
]
except
KeyError
:
pass
for
group
in
groups
:
try
:
GroupProfile
.
search
(
group
)
except
Group
.
DoesNotExist
:
newgroups
.
append
(
group
)
return
newgroups
# github.com/django/django/blob/stable/1.6.x/django/contrib/messages/views.py
class
SuccessMessageMixin
(
object
):
"""
...
...
@@ -691,6 +729,8 @@ class GroupDetailView(CheckedDetailView):
context
[
'group'
]
=
self
.
object
context
[
'users'
]
=
self
.
object
.
user_set
.
all
()
context
[
'acl'
]
=
get_group_acl_data
(
self
.
object
)
context
[
'group_profile_form'
]
=
GroupProfileUpdate
.
get_form_object
(
self
.
request
,
self
.
object
.
profile
)
return
context
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
...
...
@@ -1536,44 +1576,9 @@ class NodeCreate(LoginRequiredMixin, SuperuserRequiredMixin, TemplateView):
return
redirect
(
path
)
class
GroupCreate
(
LoginRequiredMixin
,
TemplateView
):
class
GroupCreate
(
GroupCodeMixin
,
LoginRequiredMixin
,
TemplateView
):
form_class
=
GroupCreateForm
form
=
None
def
get_available_group_codes
(
self
,
request
):
newgroups
=
[]
if
saml_available
:
from
djangosaml2.cache
import
StateCache
,
IdentityCache
from
djangosaml2.conf
import
get_config
from
djangosaml2.views
import
_get_subject_id
from
saml2.client
import
Saml2Client
state
=
StateCache
(
request
.
session
)
conf
=
get_config
(
None
,
request
)
client
=
Saml2Client
(
conf
,
state_cache
=
state
,
identity_cache
=
IdentityCache
(
request
.
session
),
logger
=
logger
)
subject_id
=
_get_subject_id
(
request
.
session
)
identity
=
client
.
users
.
get_identity
(
subject_id
,
check_not_on_or_after
=
False
)
if
identity
:
attributes
=
identity
[
0
]
owneratrs
=
getattr
(
settings
,
'SAML_GROUP_OWNER_ATTRIBUTES'
,
[])
groups
=
[]
for
i
in
owneratrs
:
try
:
groups
+=
attributes
[
i
]
except
KeyError
:
pass
for
group
in
groups
:
try
:
GroupProfile
.
search
(
group
)
except
Group
.
DoesNotExist
:
newgroups
.
append
(
group
)
return
newgroups
def
get_template_names
(
self
):
if
self
.
request
.
is_ajax
():
...
...
@@ -1615,6 +1620,52 @@ class GroupCreate(LoginRequiredMixin, TemplateView):
return
redirect
(
savedform
.
profile
.
get_absolute_url
())
class
GroupProfileUpdate
(
GroupCodeMixin
,
LoginRequiredMixin
,
UpdateView
):
form_class
=
GroupProfileUpdateForm
model
=
Group
@classmethod
def
get_available_group_codes
(
cls
,
request
,
extra
=
None
):
result
=
super
(
GroupProfileUpdate
,
cls
)
.
get_available_group_codes
(
request
)
if
extra
and
not
extra
in
result
:
result
+=
[
extra
]
return
result
def
get_object
(
self
):
group
=
super
(
GroupProfileUpdate
,
self
)
.
get_object
()
profile
=
group
.
profile
if
not
profile
.
has_level
(
self
.
request
.
user
,
'owner'
):
raise
PermissionDenied
else
:
return
profile
@classmethod
def
get_form_object
(
cls
,
request
,
instance
,
*
args
,
**
kwargs
):
kwargs
[
'instance'
]
=
instance
kwargs
[
'new_groups'
]
=
cls
.
get_available_group_codes
(
request
,
instance
.
org_id
)
return
cls
.
form_class
(
*
args
,
**
kwargs
)
def
get
(
self
,
request
,
form
=
None
,
*
args
,
**
kwargs
):
self
.
object
=
self
.
get_object
()
if
form
is
None
:
form
=
self
.
get_form_object
(
request
,
self
.
object
)
return
super
(
GroupProfileUpdate
,
self
)
.
get
(
request
,
form
,
*
args
,
**
kwargs
)
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
if
not
request
.
user
.
has_module_perms
(
'auth'
):
raise
PermissionDenied
()
self
.
object
=
self
.
get_object
()
form
=
self
.
get_form_object
(
request
,
self
.
object
,
self
.
request
.
POST
)
if
not
form
.
is_valid
():
return
self
.
get
(
request
,
form
,
*
args
,
**
kwargs
)
form
.
save
()
return
redirect
(
self
.
object
.
get_absolute_url
())
class
VmDelete
(
LoginRequiredMixin
,
DeleteView
):
model
=
Instance
template_name
=
"dashboard/confirm/base-delete.html"
...
...
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