Skip to content

Instantly share code, notes, and snippets.

@Gryffind96
Last active November 27, 2019 23:05
Show Gist options
  • Save Gryffind96/573304d03cef6a715e71ecf12afca8a9 to your computer and use it in GitHub Desktop.
Save Gryffind96/573304d03cef6a715e71ecf12afca8a9 to your computer and use it in GitHub Desktop.
MISC REUSABLE FUNCTIONS FOR NODE JS BACKEND

bucket.js

const aws = require('aws-sdk'); 
const AmazonS3URI = require('amazon-s3-uri');
const s3 = new aws.S3({
    accessKeyId: process.env.IAM_USER_KEY,
    secretAccessKey: process.env.IAM_USER_SECRET,
    region: ''
});

module.exports = {
    
    getUrl : async(base64)=>{
        return new Promise((resolve,reject)=>{

            //create buffer with base64
            const base64Data = new Buffer.from(base64.replace(/^data:.+;base64,/, ""), 'base64');
    
            // Getting the file type, ie: jpeg, png or gif
            const ext = base64.split(';')[0].split('/')[1];
    
            //Getting de ref application or image
            let ref = base64.split(';')[0].split('/')[0];
            ref = ref.split(':')[1];
    
            //create filename
            let fname = `${Date.now()}.${ext}`;
    
            const params = {
                Bucket: process.env.BUCKET_NAME,
                Key: fname, // type is not required
                Body: base64Data,
                ContentEncoding: 'base64', // required
                ContentType: `${ref}/${ext}` // required. Notice the back ticks
            }
    
            s3.upload(params, function (err, data) {
                if (err) {
                    reject(err);
                }else{
                    resolve(data.Location);
                }
                
            });
        });
    }, 

    getUrlFromFile: async(file)=>{
        return new Promise((resolve, reject) => {
            let fname = Date.now() + '-' + file.name;
            const params = {
                Bucket: process.env.BUCKET_NAME, // pass your bucket name
                Key: fname, // file will be saved as testBucket/contacts.csv
                Body: file.data
            };
    
            s3.upload(params, function (s3Err, data) {
                if (err) {
                    reject(err);
                }else{
                    resolve(data.Location);
                }
            });
        });
    },

    deleteFile: async(url)=>{
        return new Promise((resolve, reject) => {
            let {
                key
            } = AmazonS3URI(url);
            const params = {
                Bucket: process.env.BUCKET_NAME, // pass your bucket name
                Key: key
            };
            s3.headObject(params, (err, metadata) => {
                if (err && err.code === 'NotFound') { // no exists nothing to delete
                    resolve(true)
                } else { // exists, we have to delete it
                    s3.deleteObject(params, (err, data) => {
                        if (err) {
                            reject(err);
                        }
                        resolve(true); //successfully deleted
                    });
                }
            });
        });
    }
    
}

jwt.js

const jwt = require('jsonwebtoken');
const signature = 'ichigo';
module.exports = {

    sign: (data)=> jwt.sign(data,signature,{expiresIn: '1h'}),
    decode: (token)=> {
        let decoded  = jwt.decode(token);
        return decoded.payload;
    },
    verify: (token)=>{
        try {
            var decoded = jwt.verify(token, signature);
            return decoded;
          } catch(err) {
            return false;
          }
    }
}

mailer.js

const nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
           user: process.env.EMAIL,
           pass: process.env.EMAIL_TOKEN
       }
});

module.exports = {
     sendEmail: (from,to,subject,template)=>{
       console.log('generando el correo');
        let info =  transporter.sendMail({
            from: from, // sender address
            to: to, // list of receivers
            subject: subject, // Subject line
            html: template // html body
        }, function (err, info) {
            if(err)
              console.log(err);
            else
              console.log(info);
         });
     }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment