Skip to content

Commit

Permalink
Fixes #1270 : Added cloud function for sending mail on successfull ba…
Browse files Browse the repository at this point in the history
…dge generation
  • Loading branch information
yashLadha committed Jul 11, 2018
1 parent 77708b4 commit 7a8fb76
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 8 deletions.
27 changes: 21 additions & 6 deletions api/controllers/generateBadges.py
@@ -1,5 +1,5 @@
# from api.helpers.verifyToken import loginRequired
import os
import datetime

from shutil import rmtree
from api.config import config
Expand All @@ -20,6 +20,7 @@
CSVNotFound,
UsageNotAllowed
)
from firebase_admin import db as firebase_db
from api.utils.firebaseUploader import fileUploader, deleteFile


Expand Down Expand Up @@ -48,10 +49,12 @@ def generateBadges():
font_choice = data.get('font_type') or None
svg2png = SVG2PNG()
if config.ENV == 'PROD':
svg2png.do_text_fill(os.getcwd() + '/api/static/badges/8BadgesOnA3.svg', text_color)
svg2png.do_text_fill(
os.getcwd() + '/api/static/badges/8BadgesOnA3.svg', text_color)
else:
svg2png.do_text_fill('static/badges/8BadgesOnA3.svg', text_color)
merge_badges = MergeBadges(image_name, csv_name, badge_size, font_size, font_choice)
merge_badges = MergeBadges(
image_name, csv_name, badge_size, font_size, font_choice)
merge_badges.merge_pdfs()

uid = data.get('uid')
Expand All @@ -61,7 +64,8 @@ def generateBadges():
return ErrorResponse(UsageNotAllowed().message, 403, {'Content-Type': 'application/json'}).respond()

user_creator.allowed_usage = user_creator.allowed_usage - 1
badge_created = Badges(image=image_name, csv=csv_name, text_color=text_color, badge_size='A3', creator=user_creator)
badge_created = Badges(image=image_name, csv=csv_name,
text_color=text_color, badge_size='A3', creator=user_creator)
badge_created.save_to_db()

badgeFolder = badge_created.image.split('.')[0]
Expand All @@ -71,10 +75,13 @@ def generateBadges():
else:
badgePath = os.getcwd() + '/api/static/temporary/' + badgeFolder
if os.path.isdir(badgePath):
imageDirectory = os.path.join(badgePath, '../../uploads/image', image_name)
imageDirectory = os.path.join(
badgePath, '../../uploads/image', image_name)
link = fileUploader(imageDirectory, 'images/' + image_name)
badge_created.image_link = link
link = fileUploader(badgePath + '/all-badges.pdf', 'badges/' + badge_created.id + '.pdf')
link = fileUploader(badgePath + '/all-badges.pdf',
'badges/' + badge_created.id + '.pdf')
send_badge_mail(badge_created.id, user_creator.id, link)
badge_created.download_link = link
rmtree(badgePath, ignore_errors=True)

Expand All @@ -83,6 +90,14 @@ def generateBadges():
return jsonify(BadgeSchema().dump(badge_created).data)


def send_badge_mail(badgeId, userId, badgeLink):
ref = firebase_db.reference('badgeMails')
ref.child(userId).child(datetime.datetime.utcnow().isoformat().replace('-', '_').replace(':', 'U').replace('.', 'D')).set({
'badgeId': badgeId,
'badgeLink': badgeLink
})


@router.route('/get_badges', methods=['GET'])
@loginRequired
def get_badges():
Expand Down
34 changes: 32 additions & 2 deletions cloud-functions/functions/index.js
Expand Up @@ -11,7 +11,8 @@ const fs = require('fs');

admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: clientAccount.databaseURL
databaseURL: clientAccount.databaseURL,
storageBucket: clientAccount.storageBucket
});

firebase.initializeApp(clientAccount);
Expand All @@ -33,7 +34,7 @@ const BASE_URL = 'http://badgeyay.com/';
const PASSWORD_RESET_LINK = 'http://badgeyay.com/#/reset/password?token=';
var password = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
var db = admin.database();
var REASONS = ['verificaton', 'greeting', 'passwordReset'];
var REASONS = ['verificaton', 'greeting', 'passwordReset', 'badgeGeneration'];


var encrypt = function (input, password, callback) {
Expand Down Expand Up @@ -143,6 +144,35 @@ exports.sendVerificationMail = functions.auth.user().onCreate((user) => {
}
});

exports.sendBadgeMail = functions.database.ref('/badgeMails/{userId}/{date}')
.onCreate((snapshot, context) => {
const payload = snapshot.val();
const uid = context.params.userId;
return admin.auth().getUser(uid)
.then(record => {
return sendBadgeGenMail(uid, record.email, record.displayName, payload['badgeId'], payload['badgeLink']);
})
.catch(() => { return -1 });
});

function sendBadgeGenMail(uid, email, displayName, badgeId, badgeLink) {
const mailOptions = {
from: `${APP_NAME}<noreply@firebase.com>`,
to: email,
};

mailOptions.subject = `Badge Generated ${badgeId}`;
mailOptions.html = `<p> Hello ${displayName || ''}! Your badge is generated successfully, please visit the <a href=${badgeLink}>link</a> to download badge</p>`;
return mailTransport.sendMail(mailOptions).then(() => {
writeMailData(uid, "success", 3);
return console.log('Badge mail sent to: ', email)
}).catch((err) => {
console.error(err.message);
return -1;
});
}


function writeMailData(uid, state, reason) {
if (state === 'success') {
db.ref('mails')
Expand Down

0 comments on commit 7a8fb76

Please sign in to comment.