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
58bbcde8
Commit
58bbcde8
authored
May 21, 2015
by
Daniel STAN
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
server: envoie un seul mail par session
parent
0cd30619
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
9 deletions
+28
-9
server.py
server.py
+28
-9
No files found.
server.py
View file @
58bbcde8
...
...
@@ -13,6 +13,7 @@ import json
import
datetime
import
socket
import
subprocess
import
itertools
from
email.mime.text
import
MIMEText
from
email.mime.multipart
import
MIMEMultipart
...
...
@@ -121,7 +122,8 @@ def keepalive():
@
server_command
(
'listroles'
)
def
listroles
():
"""Liste des roles existant et de leurs membres.
Renvoie également un rôle particulier ``"whoami"``, contenant l'username de l'utilisateur qui s'est connecté."""
Renvoie également un rôle particulier ``"whoami"``, contenant l'username
de l'utilisateur qui s'est connecté."""
d
=
serverconfig
.
ROLES
if
d
.
has_key
(
"whoami"
):
raise
ValueError
(
'La rôle "whoami" ne devrait pas exister'
)
...
...
@@ -166,7 +168,8 @@ def getfiles(filenames):
# TODO ça n'a rien à faire là, à placer plus haut dans le code
def
_putfile
(
filename
,
roles
,
contents
):
"""Écrit ``contents`` avec les roles ``roles`` dans le fichier ``filename``"""
"""Écrit ``contents`` avec les roles ``roles`` dans le fichier ``filename``
"""
gotit
,
old
=
getfile
(
filename
)
if
not
gotit
:
old
=
u
"[Création du fichier]"
...
...
@@ -178,7 +181,7 @@ def _putfile(filename, roles, contents):
corps
=
u
"Le fichier %s a été modifié par %s."
%
(
filename
,
MYUID
)
backup
(
corps
,
filename
,
old
)
notification
(
u
"Modification
de %s"
%
filename
,
corps
,
filename
,
old
)
notification
(
u
"Modification
"
,
filename
,
MYUID
)
filepath
=
getpath
(
filename
)
if
type
(
contents
)
!=
unicode
:
...
...
@@ -201,7 +204,8 @@ def putfile(filename, parsed_stdin):
@
server_command
(
'putfiles'
,
stdin_input
=
True
,
write
=
True
)
def
putfiles
(
parsed_stdin
):
"""Écrit plusieurs fichiers. Lit les filenames sur l'entrée standard avec le reste."""
"""Écrit plusieurs fichiers. Lit les filenames sur l'entrée standard avec le
reste."""
results
=
[]
for
fichier
in
parsed_stdin
:
try
:
...
...
@@ -224,7 +228,7 @@ def rmfile(filename):
if
validate
(
roles
,
'w'
):
corps
=
u
"Le fichier %s a été supprimé par %s."
%
(
filename
,
MYUID
)
backup
(
corps
,
filename
,
old
)
notification
(
u
"Suppression
de %s"
%
filename
,
corps
,
filename
,
old
)
notification
(
u
"Suppression
"
,
fname
,
MYUID
)
os
.
remove
(
getpath
(
filename
))
else
:
return
u
"Vous n'avez pas les droits d'écriture sur le fichier %s."
%
filename
...
...
@@ -241,20 +245,33 @@ def backup(corps, fname, old):
back
.
write
((
u
'* %s: %s
\n
'
%
(
str
(
datetime
.
datetime
.
now
()),
corps
)).
encode
(
"utf-8"
))
back
.
close
()
def
notification
(
subject
,
corps
,
fname
,
old
):
_notif_todo
=
[]
def
notification
(
action
,
fname
,
actor
):
"""Enregistre une notification"""
_notif_todo
.
append
((
action
,
fname
,
actor
))
def
notification_mail
():
"""Envoie par mail une notification de changement de fichier"""
if
not
_notif_todo
:
return
frommail
=
serverconfig
.
CRANSP_MAIL
tomail
=
serverconfig
.
DEST_MAIL
actions
=
set
(
task
[
1
]
for
task
in
_notif_todo
)
msg
=
MIMEMultipart
(
_charset
=
"utf-8"
)
msg
[
'Subject'
]
=
subject
msg
[
'Subject'
]
=
u
"Modification de la base (%s)"
%
(
', '
.
join
(
actions
))
msg
[
'X-Mailer'
]
=
serverconfig
.
cmd_name
.
decode
()
msg
[
'From'
]
=
frommail
msg
[
'To'
]
=
tomail
msg
.
preamble
=
u
"%s report"
%
(
serverconfig
.
cmd_name
.
decode
(),)
info
=
MIMEText
(
corps
+
u
"
\n
La version précédente a été sauvegardée."
+
liste
=
(
u
" * %s de %s par %s"
%
task
for
task
in
_notif_todo
)
info
=
MIMEText
(
u
"Des modifications ont été faites:
\n
"
+
u
"
\n
"
.
join
(
liste
)
+
u
"
\n\n
Des sauvegardes ont été réalisées."
+
u
"
\n\n
Modification effectuée sur %s."
%
socket
.
gethostname
()
+
u
"
\n\n
--
\n
Cranspasswords.py"
,
_charset
=
"utf-8"
)
msg
.
attach
(
info
)
...
...
@@ -277,3 +294,5 @@ if __name__ == "__main__":
answer
=
command
.
decorated
(
*
args
)
if
answer
is
not
None
:
print
(
json
.
dumps
(
answer
))
notification_mail
()
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