11'use strict' ;
22const url = require ( 'url' ) ;
3- const uuid = require ( 'uuidv4' ) ;
3+ // const uuid = require('uuidv4');
44const request = require ( 'request' ) ;
5- const rp = require ( 'request-promise' ) ;
5+ // const rp = require('request-promise');
66
77const config = require ( './config.json' ) ;
88
9- const Storage = require ( '@google-cloud/storage' ) ;
9+ const { Storage} = require ( '@google-cloud/storage' ) ;
1010const storage = new Storage ( {
1111 projectId : config . project_id ,
1212 keyFilename : config . keys . cloud_storage . path
1313} ) ;
1414
15-
1615function parseURL ( urlString ) {
1716 try {
1817 return url . parse ( urlString ) ;
1918 }
2019 catch ( e ) {
21- //
20+ // TODO
2221 }
23- console . log ( 'index.js, parseURL not written' ) ;
24- //return(url);
2522}
2623
2724function checkURLStatus ( url ) {
2825 return new Promise ( ( resolve , reject ) => {
29- const request = require ( 'request' ) ;
30-
3126 request ( { method : 'HEAD' , url} , function ( error , response ) {
32- if ( error || response . statusCode !== 200 ) {
27+ if ( error || response . statusCode !== 200 )
3328 reject ( { url, statusCode :response . statusCode , error :error ?error :'inaccessibleURL' , message :'Remote URL could not be reached.' } ) ;
34- }
3529 resolve ( url ) ;
3630 } ) ;
3731 } ) ;
@@ -52,46 +46,30 @@ function verifyURL(url) {
5246 } ) ;
5347}
5448
55- // For testing
56- async function uploadLocalFile ( fileName , bucketName ) {
57- await storage . bucket ( bucketName ) . upload ( fileName , {
58- gzip : true ,
59- metadata : {
60- cacheControl : 'public, max-age=31536000' ,
61- } ,
62- } ) ;
63- }
64-
65- /*
66- const bucket = gcs.bucket('bucket_name');
67- const gcsname = 'test.pdf';
68- const file = bucket.file(gcsname);
69- var pdfdata = "binary_pdf_file_string";
70- var buff = Buffer.from(pdfdata, 'binary').toString('utf-8');
49+ /* // Testing purposes:
50+ async function uploadLocalFile(bucket, fileName) {
7151
72- const stream = file.createWriteStream({
73- metadata: {
74- contentType: 'application/pdf'
75- }
76- });
77- stream.on('error', (err) => {
78- console.log(err);
79- });
80- stream.on('finish', () => {
81- console.log(gcsname);
82- });
83- stream.end(new Buffer(buff, 'base64'));
52+ await bucket.upload(fileName, { gzip: true });
53+ }
8454*/
8555
86- function uploadByURL ( url , endpoint , location ) {
87- //let message = { uploadedFiles: `${imageURL}` };
88- let file = myBucket . file ( 'my-file' ) ;
89- request ( url )
90- . pipe ( endpoint . upload ( ) ) ;
56+ // Returns a Promise object which resolves to a stream.
57+ function uploadByURL ( url , bucket , fileName ) {
58+ let file = bucket . file ( fileName ) ;
59+ return new Promise ( ( resolve , reject ) => {
60+ request ( url )
61+ . on ( 'response' , ( response ) => { response . pause ( ) ; resolve ( response ) ; } ) // Create, then pause and return the stream
62+ . on ( 'error' , ( reject ) ) ;
63+ } )
64+ . then ( ( response ) => { return response . pipe ( file . createWriteStream ( { gzip : true } ) ) ; } )
65+ . catch ( ( error ) => { return { error } ; } ) ; // TODO: Add more detailed error handling. - statusCode etc.
66+ }
9167
92- //res.status(200).json(message);x
68+ function upload ( url , fileName ) {
69+ return uploadByURL ( url , storage . bucket ( config . bucket_name ) , fileName ) ;
9370}
9471
72+
9573function getImage ( req , res ) {
9674 let message = req . query . message || req . body . message || 'Hello World!' ;
9775 switch ( req . get ( 'content-type' ) ) {
@@ -112,7 +90,7 @@ function getImage(req, res) {
11290// Lambdas
11391
11492/**
115- * images - served as our /images webhook.
93+ * images - /images webhook.
11694 * @param {[type] } req [description]
11795 * @param {[type] } res [description]
11896 * @return {[type] } [description]
@@ -122,10 +100,11 @@ exports.images = (req, res) => {
122100 let urls = res . body . urls ;
123101 switch ( req . method ) {
124102 case 'POST' :
103+ // For each URL, verify, upload it, then aggregate the results to return as JSON object.
125104 Promise . all (
126105 urls . map ( ( url ) => {
127106 return verifyURL ( url )
128- . then ( uploadByURL ) ;
107+ . then ( ( url ) => { upload ( url , url ) ; } ) ; // naming convention will likely need to change for multi-users
129108 } )
130109 )
131110 // TODO: Change status IDs depending on error/s from Promises.
@@ -137,8 +116,3 @@ exports.images = (req, res) => {
137116 break ;
138117 }
139118} ;
140-
141- exports . upload = ( req , res ) => {
142-
143- res . status ( 200 ) . send ( { } ) ;
144- } ;
0 commit comments