Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
Cranspasswords
Manage
Activity
Members
Labels
Plan
Issues
2
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Daniel Stan
Cranspasswords
Commits
58bbcde8
Commit
58bbcde8
authored
9 years ago
by
Daniel STAN
Browse files
Options
Downloads
Patches
Plain Diff
server: envoie un seul mail par session
parent
0cd30619
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
server.py
+28
-9
28 additions, 9 deletions
server.py
with
28 additions
and
9 deletions
server.py
+
28
−
9
View file @
58bbcde8
...
@@ -13,6 +13,7 @@ import json
...
@@ -13,6 +13,7 @@ import json
import
datetime
import
datetime
import
socket
import
socket
import
subprocess
import
subprocess
import
itertools
from
email.mime.text
import
MIMEText
from
email.mime.text
import
MIMEText
from
email.mime.multipart
import
MIMEMultipart
from
email.mime.multipart
import
MIMEMultipart
...
@@ -121,7 +122,8 @@ def keepalive():
...
@@ -121,7 +122,8 @@ def keepalive():
@server_command
(
'
listroles
'
)
@server_command
(
'
listroles
'
)
def
listroles
():
def
listroles
():
"""
Liste des roles existant et de leurs membres.
"""
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
d
=
serverconfig
.
ROLES
if
d
.
has_key
(
"
whoami
"
):
if
d
.
has_key
(
"
whoami
"
):
raise
ValueError
(
'
La rôle
"
whoami
"
ne devrait pas exister
'
)
raise
ValueError
(
'
La rôle
"
whoami
"
ne devrait pas exister
'
)
...
@@ -166,7 +168,8 @@ def getfiles(filenames):
...
@@ -166,7 +168,8 @@ def getfiles(filenames):
# TODO ça n'a rien à faire là, à placer plus haut dans le code
# TODO ça n'a rien à faire là, à placer plus haut dans le code
def
_putfile
(
filename
,
roles
,
contents
):
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
)
gotit
,
old
=
getfile
(
filename
)
if
not
gotit
:
if
not
gotit
:
old
=
u
"
[Création du fichier]
"
old
=
u
"
[Création du fichier]
"
...
@@ -178,7 +181,7 @@ def _putfile(filename, roles, contents):
...
@@ -178,7 +181,7 @@ def _putfile(filename, roles, contents):
corps
=
u
"
Le fichier %s a été modifié par %s.
"
%
(
filename
,
MYUID
)
corps
=
u
"
Le fichier %s a été modifié par %s.
"
%
(
filename
,
MYUID
)
backup
(
corps
,
filename
,
old
)
backup
(
corps
,
filename
,
old
)
notification
(
u
"
Modification
de %s
"
%
filename
,
corps
,
filename
,
old
)
notification
(
u
"
Modification
"
,
filename
,
MYUID
)
filepath
=
getpath
(
filename
)
filepath
=
getpath
(
filename
)
if
type
(
contents
)
!=
unicode
:
if
type
(
contents
)
!=
unicode
:
...
@@ -201,7 +204,8 @@ def putfile(filename, parsed_stdin):
...
@@ -201,7 +204,8 @@ def putfile(filename, parsed_stdin):
@server_command
(
'
putfiles
'
,
stdin_input
=
True
,
write
=
True
)
@server_command
(
'
putfiles
'
,
stdin_input
=
True
,
write
=
True
)
def
putfiles
(
parsed_stdin
):
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
=
[]
results
=
[]
for
fichier
in
parsed_stdin
:
for
fichier
in
parsed_stdin
:
try
:
try
:
...
@@ -224,7 +228,7 @@ def rmfile(filename):
...
@@ -224,7 +228,7 @@ def rmfile(filename):
if
validate
(
roles
,
'
w
'
):
if
validate
(
roles
,
'
w
'
):
corps
=
u
"
Le fichier %s a été supprimé par %s.
"
%
(
filename
,
MYUID
)
corps
=
u
"
Le fichier %s a été supprimé par %s.
"
%
(
filename
,
MYUID
)
backup
(
corps
,
filename
,
old
)
backup
(
corps
,
filename
,
old
)
notification
(
u
"
Suppression
de %s
"
%
filename
,
corps
,
file
name
,
old
)
notification
(
u
"
Suppression
"
,
f
name
,
MYUID
)
os
.
remove
(
getpath
(
filename
))
os
.
remove
(
getpath
(
filename
))
else
:
else
:
return
u
"
Vous n
'
avez pas les droits d
'
écriture sur le fichier %s.
"
%
filename
return
u
"
Vous n
'
avez pas les droits d
'
écriture sur le fichier %s.
"
%
filename
...
@@ -241,20 +245,33 @@ def backup(corps, fname, old):
...
@@ -241,20 +245,33 @@ def backup(corps, fname, old):
back
.
write
((
u
'
* %s: %s
\n
'
%
(
str
(
datetime
.
datetime
.
now
()),
corps
)).
encode
(
"
utf-8
"
))
back
.
write
((
u
'
* %s: %s
\n
'
%
(
str
(
datetime
.
datetime
.
now
()),
corps
)).
encode
(
"
utf-8
"
))
back
.
close
()
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
"""
"""
Envoie par mail une notification de changement de fichier
"""
if
not
_notif_todo
:
return
frommail
=
serverconfig
.
CRANSP_MAIL
frommail
=
serverconfig
.
CRANSP_MAIL
tomail
=
serverconfig
.
DEST_MAIL
tomail
=
serverconfig
.
DEST_MAIL
actions
=
set
(
task
[
1
]
for
task
in
_notif_todo
)
msg
=
MIMEMultipart
(
_charset
=
"
utf-8
"
)
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
[
'
X-Mailer
'
]
=
serverconfig
.
cmd_name
.
decode
()
msg
[
'
From
'
]
=
frommail
msg
[
'
From
'
]
=
frommail
msg
[
'
To
'
]
=
tomail
msg
[
'
To
'
]
=
tomail
msg
.
preamble
=
u
"
%s report
"
%
(
serverconfig
.
cmd_name
.
decode
(),)
msg
.
preamble
=
u
"
%s report
"
%
(
serverconfig
.
cmd_name
.
decode
(),)
info
=
MIMEText
(
corps
+
liste
=
(
u
"
* %s de %s par %s
"
%
task
for
task
in
_notif_todo
)
u
"
\n
La version précédente a été sauvegardée.
"
+
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
Modification effectuée sur %s.
"
%
socket
.
gethostname
()
+
u
"
\n\n
--
\n
Cranspasswords.py
"
,
_charset
=
"
utf-8
"
)
u
"
\n\n
--
\n
Cranspasswords.py
"
,
_charset
=
"
utf-8
"
)
msg
.
attach
(
info
)
msg
.
attach
(
info
)
...
@@ -277,3 +294,5 @@ if __name__ == "__main__":
...
@@ -277,3 +294,5 @@ if __name__ == "__main__":
answer
=
command
.
decorated
(
*
args
)
answer
=
command
.
decorated
(
*
args
)
if
answer
is
not
None
:
if
answer
is
not
None
:
print
(
json
.
dumps
(
answer
))
print
(
json
.
dumps
(
answer
))
notification_mail
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment