Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Crans Passwords
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
5
Issues
5
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nounous
Crans Passwords
Commits
a97aa5ee
Commit
a97aa5ee
authored
Jul 28, 2013
by
Vincent Le gallic
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
print_function
parent
7dacd6bb
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
39 additions
and
35 deletions
+39
-35
client.py
client.py
+31
-29
server.py
server.py
+8
-6
No files found.
client.py
View file @
a97aa5ee
...
...
@@ -8,6 +8,8 @@ Authors : Daniel Stan <daniel.stan@crans.org>
Vincent Le Gallic <legallic@crans.org>
"""
from
__future__
import
print_function
import
sys
import
subprocess
import
json
...
...
@@ -192,7 +194,7 @@ def check_keys():
for
(
mail
,
fpr
)
in
keys
.
values
():
if
fpr
:
if
VERB
:
print
(
u
"Checking %s"
%
(
mail
)).
encode
(
"utf-8"
)
print
((
u
"Checking %s"
%
(
mail
)).
encode
(
"utf-8"
)
)
corresponds
=
[
key
for
key
in
localkeys
if
key
[
"fingerprint"
]
==
fpr
]
# On vérifie qu'on possède la clé…
if
len
(
corresponds
)
==
1
:
...
...
@@ -202,13 +204,13 @@ def check_keys():
meaning
,
trustvalue
=
GPG_TRUSTLEVELS
[
correspond
[
"trust"
]]
# … et qu'on lui fait confiance
if
not
trustvalue
:
print
(
u
"--> Fail on %s:%s
\n
La confiance en la clé est : %s"
%
(
meaning
,)).
encode
(
"utf-8"
)
print
((
u
"--> Fail on %s:%s
\n
La confiance en la clé est : %s"
%
(
meaning
,)).
encode
(
"utf-8"
)
)
failed
=
True
else
:
print
(
u
"--> Fail on %s:%s
\n
!! Le fingerprint et le mail ne correspondent pas !"
%
(
fpr
,
mail
)).
encode
(
"utf-8"
)
print
((
u
"--> Fail on %s:%s
\n
!! Le fingerprint et le mail ne correspondent pas !"
%
(
fpr
,
mail
)).
encode
(
"utf-8"
)
)
failed
=
True
else
:
print
(
u
"--> Fail on %s:%s
\n
Pas (ou trop) de clé avec ce fingerprint."
%
(
fpr
,
mail
)).
encode
(
"utf-8"
)
print
((
u
"--> Fail on %s:%s
\n
Pas (ou trop) de clé avec ce fingerprint."
%
(
fpr
,
mail
)).
encode
(
"utf-8"
)
)
failed
=
True
return
not
failed
...
...
@@ -245,8 +247,8 @@ def encrypt(roles, contents):
stdin
.
close
()
out
=
stdout
.
read
().
decode
(
"utf-8"
)
if
out
==
''
:
if
VERB
:
print
u
"Échec de chiffrement"
.
encode
(
"utf-8"
)
if
not
QUIET
:
print
(
u
"Échec de chiffrement"
.
encode
(
"utf-8"
)
)
return
None
else
:
return
out
...
...
@@ -265,7 +267,7 @@ def put_password(name, roles, contents):
if
NROLES
!=
None
:
roles
=
NROLES
if
VERB
:
print
u
"Pas de nouveaux rôles"
.
encode
(
"utf-8"
)
print
(
u
"Pas de nouveaux rôles"
.
encode
(
"utf-8"
)
)
if
enc_pwd
<>
None
:
return
put_file
(
name
,
roles
,
enc_pwd
)
else
:
...
...
@@ -304,7 +306,7 @@ def editor(texte, annotations=u""):
def
show_files
():
"""Affiche la liste des fichiers disponibles sur le serveur distant"""
print
u
"Liste des fichiers disponibles :"
.
encode
(
"utf-8"
)
print
(
u
"Liste des fichiers disponibles :"
.
encode
(
"utf-8"
)
)
my_roles
=
get_my_roles
()
files
=
all_files
()
keys
=
files
.
keys
()
...
...
@@ -312,21 +314,21 @@ def show_files():
for
fname
in
keys
:
froles
=
files
[
fname
]
access
=
set
(
my_roles
).
intersection
(
froles
)
!=
set
([])
print
(
u
" %s %s (%s)"
%
((
access
and
'+'
or
'-'
),
fname
,
", "
.
join
(
froles
))).
encode
(
"utf-8"
)
print
(
u
"""--Mes roles: %s"""
%
(
", "
.
join
(
my_roles
),)).
encode
(
"utf-8"
)
print
((
u
" %s %s (%s)"
%
((
access
and
'+'
or
'-'
),
fname
,
", "
.
join
(
froles
))).
encode
(
"utf-8"
)
)
print
((
u
"""--Mes roles: %s"""
%
(
", "
.
join
(
my_roles
),)).
encode
(
"utf-8"
)
)
def
show_roles
():
"""Affiche la liste des roles existants"""
print
u
"Liste des roles disponibles"
.
encode
(
"utf-8"
)
print
(
u
"Liste des roles disponibles"
.
encode
(
"utf-8"
)
)
for
role
in
all_roles
().
keys
():
if
not
role
.
endswith
(
'-w'
):
print
(
u
" * "
+
role
).
encode
(
"utf-8"
)
print
((
u
" * "
+
role
).
encode
(
"utf-8"
)
)
def
show_servers
():
"""Affiche la liste des serveurs disponibles"""
print
u
"Liste des serveurs disponibles"
.
encode
(
"utf-8"
)
print
(
u
"Liste des serveurs disponibles"
.
encode
(
"utf-8"
)
)
for
server
in
config
.
servers
.
keys
():
print
(
u
" * "
+
server
).
encode
(
"utf-8"
)
print
((
u
" * "
+
server
).
encode
(
"utf-8"
)
)
old_clipboard
=
None
def
saveclipboard
(
restore
=
False
):
...
...
@@ -359,7 +361,7 @@ def show_file(fname):
"""Affiche le contenu d'un fichier"""
value
=
get_file
(
fname
)
if
value
==
False
:
print
u
"Fichier introuvable"
.
encode
(
"utf-8"
)
print
(
u
"Fichier introuvable"
.
encode
(
"utf-8"
)
)
return
(
sin
,
sout
)
=
gpg
(
'decrypt'
)
sin
.
write
(
value
[
'contents'
].
encode
(
"utf-8"
))
...
...
@@ -390,7 +392,7 @@ def edit_file(fname):
annotations
=
u
""
if
value
==
False
:
nfile
=
True
print
u
"Fichier introuvable"
.
encode
(
"utf-8"
)
print
(
u
"Fichier introuvable"
.
encode
(
"utf-8"
)
)
if
not
confirm
(
u
"Créer fichier ?"
):
return
annotations
+=
u
"""Ceci est un fichier initial contenant un mot de passe
...
...
@@ -402,7 +404,7 @@ Enregistrez le fichier vide pour annuler.\n"""
# créateur
roles
=
[
r
[:
-
2
]
for
r
in
roles
if
r
.
endswith
(
'-w'
)
]
if
roles
==
[]:
print
u
"Vous ne possédez aucun rôle en écriture ! Abandon."
.
encode
(
"utf-8"
)
print
(
u
"Vous ne possédez aucun rôle en écriture ! Abandon."
.
encode
(
"utf-8"
)
)
return
value
=
{
'roles'
:
roles
}
else
:
...
...
@@ -421,13 +423,13 @@ C'est-à-dire pour les utilisateurs suivants :\n%s""" % (
ntexte
=
editor
(
texte
,
annotations
)
if
ntexte
==
None
and
not
nfile
and
NROLES
==
None
:
print
u
"Pas de modifications effectuées"
.
encode
(
"utf-8"
)
print
(
u
"Pas de modifications effectuées"
.
encode
(
"utf-8"
)
)
else
:
ntexte
=
texte
if
ntexte
==
None
else
ntexte
if
put_password
(
fname
,
value
[
'roles'
],
ntexte
):
print
u
"Modifications enregistrées"
.
encode
(
"utf-8"
)
print
(
u
"Modifications enregistrées"
.
encode
(
"utf-8"
)
)
else
:
print
u
"Erreur lors de l'enregistrement (avez-vous les droits suffisants ?)"
.
encode
(
"utf-8"
)
print
(
u
"Erreur lors de l'enregistrement (avez-vous les droits suffisants ?)"
.
encode
(
"utf-8"
)
)
def
confirm
(
text
):
"""Demande confirmation, sauf si on est mode ``FORCED``"""
...
...
@@ -444,19 +446,19 @@ def remove_file(fname):
if
not
confirm
((
u
'Êtes-vous sûr de vouloir supprimer %s ?'
%
fname
).
encode
(
"utf-8"
)):
return
if
rm_file
(
fname
):
print
u
"Suppression effectuée"
.
encode
(
"utf-8"
)
print
(
u
"Suppression effectuée"
.
encode
(
"utf-8"
)
)
else
:
print
u
"Erreur de suppression (avez-vous les droits ?)"
.
encode
(
"utf-8"
)
print
(
u
"Erreur de suppression (avez-vous les droits ?)"
.
encode
(
"utf-8"
)
)
def
my_check_keys
():
"""Vérifie les clés et affiche un message en fonction du résultat"""
print
u
"Vérification que les clés sont valides (uid correspondant au login) et de confiance."
print
(
check_keys
()
and
u
"Base de clés ok"
or
u
"Erreurs dans la base"
).
encode
(
"utf-8"
)
print
(
u
"Vérification que les clés sont valides (uid correspondant au login) et de confiance."
)
print
((
check_keys
()
and
u
"Base de clés ok"
or
u
"Erreurs dans la base"
).
encode
(
"utf-8"
)
)
def
my_update_keys
():
"""Met à jour les clés existantes et affiche le résultat"""
print
update_keys
().
encode
(
"utf-8"
)
print
(
update_keys
().
encode
(
"utf-8"
)
)
def
recrypt_files
():
"""Rechiffre les fichiers"""
...
...
@@ -471,7 +473,7 @@ def recrypt_files():
for
(
fname
,
froles
)
in
all_files
().
iteritems
():
if
set
(
roles
).
intersection
(
froles
)
==
set
([]):
continue
print
(
u
"Rechiffrement de %s"
%
fname
).
encode
(
"utf-8"
)
print
((
u
"Rechiffrement de %s"
%
fname
).
encode
(
"utf-8"
)
)
put_password
(
fname
,
froles
,
get_password
(
fname
))
def
parse_roles
(
strroles
):
...
...
@@ -484,10 +486,10 @@ def parse_roles(strroles):
writable
=
False
for
role
in
strroles
.
split
(
','
):
if
role
not
in
roles
.
keys
():
print
(
u
"Le rôle %s n'existe pas !"
%
role
).
encode
(
"utf-8"
)
print
((
u
"Le rôle %s n'existe pas !"
%
role
).
encode
(
"utf-8"
)
)
return
False
if
role
.
endswith
(
'-w'
):
print
(
u
"Le rôle %s ne devrait pas être utilisé ! (utilisez %s)"
print
((
u
"Le rôle %s ne devrait pas être utilisé ! (utilisez %s)"
)
%
(
role
,
role
[:
-
2
])).
encode
(
"utf-8"
)
return
False
writable
=
writable
or
role
in
my_roles_w
...
...
@@ -565,7 +567,7 @@ if __name__ == "__main__":
parsed
.
action
()
elif
parsed
.
fname
==
None
:
if
not
QUIET
:
print
u
"Vous devez fournir un nom de fichier avec cette commande"
.
encode
(
"utf-8"
)
print
(
u
"Vous devez fournir un nom de fichier avec cette commande"
.
encode
(
"utf-8"
)
)
parser
.
print_help
()
sys
.
exit
(
1
)
else
:
...
...
server.py
View file @
a97aa5ee
...
...
@@ -3,6 +3,8 @@
"""Serveur pour cranspasswords"""
from
__future__
import
print_function
import
glob
import
os
import
pwd
...
...
@@ -163,19 +165,19 @@ if __name__ == "__main__":
pass
if
command
==
"listroles"
:
print
json
.
dumps
(
listroles
(
))
print
(
json
.
dumps
(
listroles
()
))
elif
command
==
"listkeys"
:
print
json
.
dumps
(
listkeys
(
))
print
(
json
.
dumps
(
listkeys
()
))
elif
command
==
"listfiles"
:
print
json
.
dumps
(
listfiles
(
))
print
(
json
.
dumps
(
listfiles
()
))
else
:
if
not
filename
:
sys
.
exit
(
1
)
if
command
==
"getfile"
:
print
json
.
dumps
(
getfile
(
filename
))
print
(
json
.
dumps
(
getfile
(
filename
)
))
elif
command
==
"putfile"
:
print
json
.
dumps
(
putfile
(
filename
))
print
(
json
.
dumps
(
putfile
(
filename
)
))
elif
command
==
"rmfile"
:
print
json
.
dumps
(
rmfile
(
filename
))
print
(
json
.
dumps
(
rmfile
(
filename
)
))
else
:
sys
.
exit
(
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