Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 9ac6313ffa673f796c11559dc405a73f2aeec89c
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Mon Mar 24 14:43:43 2014 +0100
[frontend] sending emails when perms change
---------------------------------------------------------------
frontend/coprs_frontend/config/copr.conf | 2 +
frontend/coprs_frontend/config/copr_devel.conf | 2 +
frontend/coprs_frontend/config/copr_unit_test.conf | 2 +
.../coprs/views/coprs_ns/coprs_general.py | 50 ++++++++++++++++++++
4 files changed, 56 insertions(+), 0 deletions(-)
diff --git a/frontend/coprs_frontend/config/copr.conf
b/frontend/coprs_frontend/config/copr.conf
index e608897..2397d21 100644
--- a/frontend/coprs_frontend/config/copr.conf
+++ b/frontend/coprs_frontend/config/copr.conf
@@ -34,3 +34,5 @@ SQLALCHEMY_ECHO = False
#CSRF_ENABLED = True
# as of Flask-WTF 0.9+
#WTF_CSRF_ENABLED = True
+#
+SEND_EMAILS = True
diff --git a/frontend/coprs_frontend/config/copr_devel.conf
b/frontend/coprs_frontend/config/copr_devel.conf
index 2f139d1..cab20c8 100644
--- a/frontend/coprs_frontend/config/copr_devel.conf
+++ b/frontend/coprs_frontend/config/copr_devel.conf
@@ -31,3 +31,5 @@ SQLALCHEMY_ECHO = True
#CSRF_ENABLED = True
# as of Flask-WTF 0.9+
#WTF_CSRF_ENABLED = True
+#
+SEND_EMAILS = True
diff --git a/frontend/coprs_frontend/config/copr_unit_test.conf
b/frontend/coprs_frontend/config/copr_unit_test.conf
index e9de359..1285420 100644
--- a/frontend/coprs_frontend/config/copr_unit_test.conf
+++ b/frontend/coprs_frontend/config/copr_unit_test.conf
@@ -31,3 +31,5 @@ SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DATABASE
CSRF_ENABLED = False
# as of Flask-WTF 0.9+
WTF_CSRF_ENABLED = False
+
+SEND_EMAILS = False
diff --git a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index f29c590..3cb6c93 100644
--- a/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/frontend/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -263,6 +263,12 @@ def copr_permissions_applier_change(username, coprname):
flask.flash("Owner cannot request permissions for his own project.")
elif applier_permissions_form.validate_on_submit():
# we rely on these to be 0 or 1 from form. TODO: abstract from that
+ if permission is not None:
+ old_builder = permission.copr_builder
+ old_admin = permission.copr_admin
+ else:
+ old_builder = 0
+ old_admin = 0
new_builder = applier_permissions_form.copr_builder.data
new_admin = applier_permissions_form.copr_admin.data
coprs_logic.CoprPermissionsLogic.update_permissions_by_applier(
@@ -271,6 +277,30 @@ def copr_permissions_applier_change(username, coprname):
flask.flash(
"Successfuly updated permissions for project '{0}'."
.format(copr.name))
+ admin_mails = [copr.owner.mail]
+ for perm in copr.copr_permissions:
+ # this 2 means that his status (admin) is approved
+ if perm.copr_admin == 2:
+ admin_mails.append(perm.user.mail)
+
+ # sending emails
+ if flask.current_app.config["SEND_EMAILS"]:
+ for mail in admin_mails:
+ msg = MIMEText("{6} is asking for these permissions:\n\n"
+ "Builder: {0} -> {1}\nAdmin: {2} ->
{3}\n\n"
+ "Project: {4}\nOwner: {5}".format(
+ helpers.PermissionEnum(old_builder),
+ helpers.PermissionEnum(new_builder),
+ helpers.PermissionEnum(old_admin),
+ helpers.PermissionEnum(new_admin),
+ copr.name, copr.owner.name, flask.g.user.name),
"plain")
+ msg["Subject"] = "[Copr] {0}: {1} is asking
permissons".format(copr.name, flask.g.user.name)
+ msg["From"] = "root(a){0}".format(platform.node())
+ msg["To"] = perm.user.mail
+ s = smtplib.SMTP("localhost")
+ s.sendmail("root(a){0}".format(platform.node()),perm.user.mail ,
msg.as_string())
+ s.quit()
+
return flask.redirect(flask.url_for("coprs_ns.copr_detail",
username=copr.owner.name,
@@ -294,12 +324,32 @@ def copr_update_permissions(username, coprname):
permissions.sort(
cmp=lambda x, y: -1 if y.user_id == flask.g.user.id else 1)
for perm in permissions:
+ old_builder = perm.copr_builder
+ old_admin = perm.copr_admin
new_builder = permissions_form[
"copr_builder_{0}".format(perm.user_id)].data
new_admin = permissions_form[
"copr_admin_{0}".format(perm.user_id)].data
coprs_logic.CoprPermissionsLogic.update_permissions(
flask.g.user, copr, perm, new_builder, new_admin)
+ if flask.current_app.config["SEND_EMAILS"]:
+ if old_builder is not new_builder or \
+ old_admin is not new_admin:
+ msg = MIMEText("Your permissions have changed:\n\n"
+ "Builder: {0} -> {1}\nAdmin: {2} ->
{3}\n\n"
+ "Project: {4}\nOwner: {5}".format(
+ helpers.PermissionEnum(old_builder),
+ helpers.PermissionEnum(new_builder),
+ helpers.PermissionEnum(old_admin),
+ helpers.PermissionEnum(new_admin),
+ copr.name, copr.owner.name),
"plain")
+ msg["Subject"] = "[Copr] {0}: Your permissions
have changed".format(copr.name)
+ msg["From"] =
"root(a){0}".format(platform.node())
+ msg["To"] = perm.user.mail
+ s = smtplib.SMTP("localhost")
+
s.sendmail("root(a){0}".format(platform.node()),perm.user.mail , msg.as_string())
+ s.quit()
+
# for now, we don't check for actions here, as permissions operation
# don't collide with any actions
except exceptions.InsufficientRightsException as e: