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
Commit
7a49024a
authored
Nov 12, 2019
by
Belákovics Ádám
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'common_store' into 'master'
Common store See merge request
!409
parents
15d09f16
d994bea5
Pipeline
#949
passed with stage
in 0 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
36 additions
and
19 deletions
+36
-19
circle/dashboard/models.py
+10
-6
circle/dashboard/store_api.py
+19
-12
circle/dashboard/views/store.py
+7
-1
No files found.
circle/dashboard/models.py
View file @
7a49024a
...
@@ -162,7 +162,7 @@ class ConnectCommand(Model):
...
@@ -162,7 +162,7 @@ class ConnectCommand(Model):
validators
=
[
connect_command_template_validator
])
validators
=
[
connect_command_template_validator
])
class
Meta
:
class
Meta
:
ordering
=
(
'id'
,
)
ordering
=
(
'id'
,)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
self
.
template
return
self
.
template
...
@@ -218,7 +218,7 @@ class Profile(Model):
...
@@ -218,7 +218,7 @@ class Profile(Model):
'id'
:
command
.
id
,
'id'
:
command
.
id
,
'cmd'
:
command
.
template
%
{
'cmd'
:
command
.
template
%
{
'port'
:
instance
.
get_connect_port
(
use_ipv6
=
use_ipv6
),
'port'
:
instance
.
get_connect_port
(
use_ipv6
=
use_ipv6
),
'host'
:
instance
.
get_connect_host
(
use_ipv6
=
use_ipv6
),
'host'
:
instance
.
get_connect_host
(
use_ipv6
=
use_ipv6
),
'password'
:
instance
.
pw
,
'password'
:
instance
.
pw
,
'username'
:
'cloud'
,
'username'
:
'cloud'
,
}}
for
command
in
commands
]
}}
for
command
in
commands
]
...
@@ -263,7 +263,7 @@ class Profile(Model):
...
@@ -263,7 +263,7 @@ class Profile(Model):
super
(
Profile
,
self
)
.
save
(
*
args
,
**
kwargs
)
super
(
Profile
,
self
)
.
save
(
*
args
,
**
kwargs
)
class
Meta
:
class
Meta
:
ordering
=
(
'id'
,
)
ordering
=
(
'id'
,)
permissions
=
(
permissions
=
(
(
'use_autocomplete'
,
_
(
'Can use autocomplete.'
)),
(
'use_autocomplete'
,
_
(
'Can use autocomplete.'
)),
)
)
...
@@ -275,7 +275,7 @@ class FutureMember(Model):
...
@@ -275,7 +275,7 @@ class FutureMember(Model):
group
=
ForeignKey
(
Group
)
group
=
ForeignKey
(
Group
)
class
Meta
:
class
Meta
:
ordering
=
(
'id'
,
)
ordering
=
(
'id'
,)
unique_together
=
(
'org_id'
,
'group'
)
unique_together
=
(
'org_id'
,
'group'
)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
...
@@ -295,7 +295,7 @@ class GroupProfile(AclBase):
...
@@ -295,7 +295,7 @@ class GroupProfile(AclBase):
description
=
TextField
(
blank
=
True
)
description
=
TextField
(
blank
=
True
)
class
Meta
:
class
Meta
:
ordering
=
(
'id'
,
)
ordering
=
(
'id'
,)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
self
.
group
.
name
return
self
.
group
.
name
...
@@ -331,7 +331,11 @@ def create_profile(user):
...
@@ -331,7 +331,11 @@ def create_profile(user):
profile
,
created
=
Profile
.
objects
.
get_or_create
(
user
=
user
)
profile
,
created
=
Profile
.
objects
.
get_or_create
(
user
=
user
)
try
:
try
:
Store
(
user
)
.
create_user
(
profile
.
smb_password
,
None
,
profile
.
disk_quota
)
store
=
Store
(
user
)
if
store
.
user_exist
():
profile
.
disk_quota
=
store
.
get_quota
()[
'soft'
]
profile
.
save
()
store
.
create_user
(
profile
.
smb_password
,
None
,
profile
.
disk_quota
)
except
:
except
:
logger
.
exception
(
"Can't create user
%
s"
,
unicode
(
user
))
logger
.
exception
(
"Can't create user
%
s"
,
unicode
(
user
))
return
created
return
created
...
...
circle/dashboard/store_api.py
View file @
7a49024a
...
@@ -44,9 +44,19 @@ class NoStoreException(StoreApiException):
...
@@ -44,9 +44,19 @@ class NoStoreException(StoreApiException):
pass
pass
class
NoOrgIdException
(
StoreApiException
):
pass
class
Store
(
object
):
class
Store
(
object
):
def
__init__
(
self
,
user
,
default_timeout
=
0.5
):
def
__init__
(
self
,
user
,
default_timeout
=
0.5
):
self
.
store_url
=
settings
.
STORE_URL
if
not
self
.
store_url
:
raise
NoStoreException
if
not
user
.
profile
.
org_id
:
raise
NoOrgIdException
self
.
username
=
'u-
%
s'
%
user
.
profile
.
org_id
self
.
request_args
=
{
'verify'
:
settings
.
STORE_VERIFY_SSL
}
self
.
request_args
=
{
'verify'
:
settings
.
STORE_VERIFY_SSL
}
if
settings
.
STORE_SSL_AUTH
:
if
settings
.
STORE_SSL_AUTH
:
self
.
request_args
[
'cert'
]
=
(
settings
.
STORE_CLIENT_CERT
,
self
.
request_args
[
'cert'
]
=
(
settings
.
STORE_CLIENT_CERT
,
...
@@ -54,18 +64,15 @@ class Store(object):
...
@@ -54,18 +64,15 @@ class Store(object):
if
settings
.
STORE_BASIC_AUTH
:
if
settings
.
STORE_BASIC_AUTH
:
self
.
request_args
[
'auth'
]
=
(
settings
.
STORE_CLIENT_USER
,
self
.
request_args
[
'auth'
]
=
(
settings
.
STORE_CLIENT_USER
,
settings
.
STORE_CLIENT_PASSWORD
)
settings
.
STORE_CLIENT_PASSWORD
)
self
.
username
=
"u-
%
d"
%
user
.
pk
self
.
default_timeout
=
default_timeout
self
.
default_timeout
=
default_timeout
self
.
store_url
=
settings
.
STORE_URL
if
not
self
.
store_url
:
raise
NoStoreException
def
_request
(
self
,
url
,
method
=
get
,
timeout
=
None
,
def
_request
(
self
,
url
,
method
=
get
,
timeout
=
None
,
raise_status_code
=
True
,
**
kwargs
):
raise_status_code
=
True
,
**
kwargs
):
url
=
urljoin
(
self
.
store_url
,
url
)
url
=
urljoin
(
self
.
store_url
,
url
)
if
timeout
is
None
:
if
timeout
is
None
:
timeout
=
self
.
default_timeout
timeout
=
self
.
default_timeout
payload
=
json
.
dumps
(
kwargs
)
if
kwargs
else
None
kwargs
[
'USER'
]
=
self
.
username
payload
=
json
.
dumps
(
kwargs
)
try
:
try
:
headers
=
{
'content-type'
:
'application/json'
}
headers
=
{
'content-type'
:
'application/json'
}
response
=
method
(
url
,
data
=
payload
,
headers
=
headers
,
response
=
method
(
url
,
data
=
payload
,
headers
=
headers
,
...
@@ -83,7 +90,7 @@ class Store(object):
...
@@ -83,7 +90,7 @@ class Store(object):
return
response
return
response
def
_request_cmd
(
self
,
cmd
,
**
kwargs
):
def
_request_cmd
(
self
,
cmd
,
**
kwargs
):
return
self
.
_request
(
self
.
username
,
post
,
CMD
=
cmd
,
**
kwargs
)
return
self
.
_request
(
"/user/"
,
post
,
CMD
=
cmd
,
**
kwargs
)
def
list
(
self
,
path
,
process
=
True
):
def
list
(
self
,
path
,
process
=
True
):
r
=
self
.
_request_cmd
(
"LIST"
,
PATH
=
path
)
r
=
self
.
_request_cmd
(
"LIST"
,
PATH
=
path
)
...
@@ -106,8 +113,8 @@ class Store(object):
...
@@ -106,8 +113,8 @@ class Store(object):
return
r
.
json
()[
'LINK'
]
return
r
.
json
()[
'LINK'
]
def
request_upload
(
self
,
path
):
def
request_upload
(
self
,
path
):
r
=
self
.
_request_cmd
(
"UPLOAD"
,
PATH
=
path
)
r
=
self
.
_request_cmd
(
"UPLOAD"
,
PATH
=
path
)
return
r
.
json
()[
'LINK'
]
return
r
.
json
()[
'LINK'
]
def
remove
(
self
,
path
):
def
remove
(
self
,
path
):
self
.
_request_cmd
(
"REMOVE"
,
PATH
=
path
)
self
.
_request_cmd
(
"REMOVE"
,
PATH
=
path
)
...
@@ -119,7 +126,7 @@ class Store(object):
...
@@ -119,7 +126,7 @@ class Store(object):
self
.
_request_cmd
(
"RENAME"
,
PATH
=
old_path
,
NEW_NAME
=
new_name
)
self
.
_request_cmd
(
"RENAME"
,
PATH
=
old_path
,
NEW_NAME
=
new_name
)
def
get_quota
(
self
):
# no CMD? :o
def
get_quota
(
self
):
# no CMD? :o
r
=
self
.
_request
(
self
.
username
)
r
=
self
.
_request
(
"/user/"
)
quota
=
r
.
json
()
quota
=
r
.
json
()
quota
.
update
({
quota
.
update
({
'readable_used'
:
filesizeformat
(
float
(
quota
[
'used'
])),
'readable_used'
:
filesizeformat
(
float
(
quota
[
'used'
])),
...
@@ -129,17 +136,17 @@ class Store(object):
...
@@ -129,17 +136,17 @@ class Store(object):
return
quota
return
quota
def
set_quota
(
self
,
quota
):
def
set_quota
(
self
,
quota
):
self
.
_request
(
"/quota/"
+
self
.
username
,
post
,
QUOTA
=
quota
)
self
.
_request
(
"/quota/"
,
post
,
QUOTA
=
quota
)
def
user_exist
(
self
):
def
user_exist
(
self
):
try
:
try
:
self
.
_request
(
self
.
username
)
self
.
_request
(
"/user/"
)
return
True
return
True
except
NotOkException
:
except
NotOkException
:
return
False
return
False
def
create_user
(
self
,
password
,
keys
,
quota
):
def
create_user
(
self
,
password
,
keys
,
quota
):
self
.
_request
(
"/new/"
+
self
.
username
,
method
=
post
,
self
.
_request
(
"/new/"
,
method
=
post
,
SMBPASSWD
=
password
,
KEYS
=
keys
,
QUOTA
=
quota
)
SMBPASSWD
=
password
,
KEYS
=
keys
,
QUOTA
=
quota
)
@staticmethod
@staticmethod
...
...
circle/dashboard/views/store.py
View file @
7a49024a
...
@@ -35,7 +35,8 @@ from django.views.generic import TemplateView
...
@@ -35,7 +35,8 @@ from django.views.generic import TemplateView
from
braces.views
import
LoginRequiredMixin
from
braces.views
import
LoginRequiredMixin
from
..store_api
import
Store
,
NoStoreException
,
NotOkException
from
..store_api
import
(
Store
,
NoStoreException
,
NotOkException
,
NoOrgIdException
)
logger
=
logging
.
getLogger
(
__name__
)
logger
=
logging
.
getLogger
(
__name__
)
...
@@ -70,6 +71,11 @@ class StoreList(LoginRequiredMixin, TemplateView):
...
@@ -70,6 +71,11 @@ class StoreList(LoginRequiredMixin, TemplateView):
return
super
(
StoreList
,
self
)
.
get
(
*
args
,
**
kwargs
)
return
super
(
StoreList
,
self
)
.
get
(
*
args
,
**
kwargs
)
except
NoStoreException
:
except
NoStoreException
:
messages
.
warning
(
self
.
request
,
_
(
"No store."
))
messages
.
warning
(
self
.
request
,
_
(
"No store."
))
except
NoOrgIdException
:
messages
.
warning
(
self
.
request
,
_
(
"Your organization ID is not set."
" To use the store, you need a"
" unique organization ID."
))
except
NotOkException
:
except
NotOkException
:
messages
.
warning
(
self
.
request
,
_
(
"Store has some problems now."
messages
.
warning
(
self
.
request
,
_
(
"Store has some problems now."
" Try again later."
))
" Try again later."
))
...
...
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