Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
django-sshkey
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
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
741bc86c
authored
Oct 08, 2014
by
Paul Kilgo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implement and test forms
parent
cccd8037
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
91 additions
and
14 deletions
+91
-14
django_sshkey/forms.py
+38
-8
django_sshkey/models.py
+11
-5
django_sshkey/tests.py
+42
-1
No files found.
django_sshkey/forms.py
View file @
741bc86c
...
@@ -27,22 +27,52 @@
...
@@ -27,22 +27,52 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from
django
import
forms
from
django
import
forms
from
django_sshkey.models
import
Key
from
django_sshkey.models
import
Key
,
UserKey
from
django_sshkey.util
import
pubkey_parse
class
UserKeyForm
(
forms
.
ModelForm
):
class
ApplicationKeyForm
(
forms
.
ModelForm
):
name
=
forms
.
CharField
(
max_length
=
50
,
required
=
False
)
key
=
forms
.
CharField
(
max_length
=
2000
,
required
=
True
)
def
clean
(
self
):
cleaned_data
=
self
.
cleaned_data
if
'key'
in
cleaned_data
:
key
=
cleaned_data
[
'key'
]
=
Key
(
key
=
cleaned_data
[
'key'
])
key
.
full_clean
()
return
cleaned_data
def
save
(
self
,
commit
=
True
):
instance
=
super
(
ApplicationKeyForm
,
self
)
.
save
(
commit
=
False
)
if
commit
:
basekey
=
self
.
cleaned_data
[
'key'
]
basekey
.
save
()
instance
.
basekey
=
basekey
instance
.
save
()
return
instance
class
NamedKeyForm
(
ApplicationKeyForm
):
def
clean
(
self
):
cleaned_data
=
super
(
NamedKeyForm
,
self
)
.
clean
()
if
'key'
in
cleaned_data
and
not
cleaned_data
.
get
(
'name'
):
pubkey
=
pubkey_parse
(
cleaned_data
[
'key'
]
.
key
)
if
not
pubkey
.
comment
:
raise
ValidationError
(
'Name or key comment required'
)
cleaned_data
[
'name'
]
=
pubkey
.
comment
return
cleaned_data
class
UserKeyForm
(
NamedKeyForm
):
class
Meta
:
class
Meta
:
model
=
Key
model
=
User
Key
fields
=
[
'name'
,
'key'
]
fields
=
[
'name'
,
'key'
]
exclude
=
[
'basekey'
]
widgets
=
{
widgets
=
{
'name'
:
forms
.
TextInput
(
attrs
=
{
'size'
:
50
,
'placeholder'
:
"username@hostname, or leave blank to use key comment"
,
}),
'key'
:
forms
.
Textarea
(
attrs
=
{
'key'
:
forms
.
Textarea
(
attrs
=
{
'cols'
:
72
,
'cols'
:
72
,
'rows'
:
15
,
'rows'
:
15
,
'placeholder'
:
"Paste in the contents of your public key file here"
,
'placeholder'
:
"Paste in the contents of your public key file here"
,
}),
}),
'name'
:
forms
.
TextInput
(
attrs
=
{
'size'
:
50
,
'placeholder'
:
"username@hostname, or leave blank to use key comment"
,
})
}
}
django_sshkey/models.py
View file @
741bc86c
...
@@ -50,7 +50,10 @@ class Key(models.Model):
...
@@ -50,7 +50,10 @@ class Key(models.Model):
db_table
=
'sshkey_key'
db_table
=
'sshkey_key'
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
unicode
(
self
.
user
)
+
u': '
+
self
.
name
if
self
.
fingerprint
:
return
self
.
fingerprint
else
:
return
self
.
key
[:
20
]
+
u'...'
def
clean_fields
(
self
,
exclude
=
None
):
def
clean_fields
(
self
,
exclude
=
None
):
if
not
exclude
or
'key'
not
in
exclude
:
if
not
exclude
or
'key'
not
in
exclude
:
...
@@ -133,10 +136,13 @@ class NamedKey(ApplicationKey):
...
@@ -133,10 +136,13 @@ class NamedKey(ApplicationKey):
def
clean
(
self
):
def
clean
(
self
):
if
not
self
.
name
:
if
not
self
.
name
:
pubkey
=
pubkey_parse
(
self
.
key
)
try
:
if
not
pubkey
.
comment
:
pubkey
=
pubkey_parse
(
self
.
key
)
raise
ValidationError
(
'Name or key comment required'
)
if
not
pubkey
.
comment
:
self
.
name
=
pubkey
.
comment
raise
ValidationError
(
'Name or key comment required'
)
self
.
name
=
pubkey
.
comment
except
Key
.
DoesNotExist
:
pass
class
UserKey
(
NamedKey
):
class
UserKey
(
NamedKey
):
user
=
models
.
ForeignKey
(
User
,
db_index
=
True
)
user
=
models
.
ForeignKey
(
User
,
db_index
=
True
)
...
...
django_sshkey/tests.py
View file @
741bc86c
...
@@ -31,6 +31,7 @@ from django.test.client import Client
...
@@ -31,6 +31,7 @@ from django.test.client import Client
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.core.exceptions
import
ValidationError
from
django.core.exceptions
import
ValidationError
from
django.core.urlresolvers
import
reverse
from
django.core.urlresolvers
import
reverse
from
django_sshkey.forms
import
UserKeyForm
from
django_sshkey.models
import
Key
,
ApplicationKey
,
NamedKey
,
UserKey
from
django_sshkey.models
import
Key
,
ApplicationKey
,
NamedKey
,
UserKey
from
django_sshkey
import
settings
from
django_sshkey
import
settings
import
os
import
os
...
@@ -262,7 +263,7 @@ class NamedKeyTestCase(BaseTestCase):
...
@@ -262,7 +263,7 @@ class NamedKeyTestCase(BaseTestCase):
basekey
=
self
.
key2
,
basekey
=
self
.
key2
,
)
)
self
.
assertRaises
(
ValidationError
,
key
.
full_clean
)
self
.
assertRaises
(
ValidationError
,
key
.
full_clean
)
class
UserKeyTestCase
(
BaseTestCase
):
class
UserKeyTestCase
(
BaseTestCase
):
@classmethod
@classmethod
...
@@ -572,3 +573,43 @@ class KeyLookupTestCase(BaseTestCase):
...
@@ -572,3 +573,43 @@ class KeyLookupTestCase(BaseTestCase):
self
.
assertIn
(
'Content-Type'
,
response
)
self
.
assertIn
(
'Content-Type'
,
response
)
self
.
assertEqual
(
response
[
'Content-Type'
],
'text/plain'
)
self
.
assertEqual
(
response
[
'Content-Type'
],
'text/plain'
)
self
.
assertEqual
(
response
.
content
,
''
)
self
.
assertEqual
(
response
.
content
,
''
)
class
UserKeyFormTestCase
(
BaseTestCase
):
@classmethod
def
setUpClass
(
cls
):
super
(
UserKeyFormTestCase
,
cls
)
.
setUpClass
()
cls
.
user1
=
User
.
objects
.
create
(
username
=
'user1'
)
cls
.
key1_path
=
os
.
path
.
join
(
cls
.
key_dir
,
'key1'
)
ssh_keygen
(
comment
=
'comment'
,
file
=
cls
.
key1_path
)
def
test_save_without_name
(
self
):
instance
=
UserKey
(
user
=
self
.
user1
)
post
=
{
'key'
:
open
(
self
.
key1_path
+
'.pub'
)
.
read
(),
}
form
=
UserKeyForm
(
post
,
instance
=
instance
)
self
.
assertTrue
(
form
.
is_valid
(),
form
.
errors
)
key
=
form
.
save
()
self
.
assertEqual
(
'comment'
,
key
.
name
)
def
test_save_with_name
(
self
):
instance
=
UserKey
(
user
=
self
.
user1
)
post
=
{
'key'
:
open
(
self
.
key1_path
+
'.pub'
)
.
read
(),
'name'
:
'name'
,
}
form
=
UserKeyForm
(
post
,
instance
=
instance
)
self
.
assertTrue
(
form
.
is_valid
(),
form
.
errors
)
key
=
form
.
save
()
self
.
assertEqual
(
'name'
,
key
.
name
)
def
test_save_blank_name
(
self
):
instance
=
UserKey
(
user
=
self
.
user1
)
post
=
{
'key'
:
open
(
self
.
key1_path
+
'.pub'
)
.
read
(),
'name'
:
''
,
}
form
=
UserKeyForm
(
post
,
instance
=
instance
)
self
.
assertTrue
(
form
.
is_valid
(),
form
.
errors
)
key
=
form
.
save
()
self
.
assertEqual
(
'comment'
,
key
.
name
)
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