From d61112dc18eb380cad80ad199db294592f1b1b92 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Tue, 14 Jan 2020 21:42:29 -0800 Subject: [PATCH] Fixed S3 document upload to have minimally functional model --- cert.pem | 35 ++++++++++++ client/package.json | 2 +- .../jobs-documents/jobs-documents.page.jsx | 38 ++++++++++--- key.pem | 54 +++++++++++++++++++ s3upload.js | 15 +++--- server.cert | 24 --------- server.js | 38 ++++++------- server.key | 28 ---------- 8 files changed, 145 insertions(+), 89 deletions(-) create mode 100644 cert.pem create mode 100644 key.pem delete mode 100644 server.cert delete mode 100644 server.key diff --git a/cert.pem b/cert.pem new file mode 100644 index 000000000..fc9c7fd26 --- /dev/null +++ b/cert.pem @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIGJzCCBA+gAwIBAgIUbtAGUWRU8Q+YGMqPt+ETB8uGnA4wDQYJKoZIhvcNAQEL +BQAwgaIxCzAJBgNVBAYTAkNBMRkwFwYDVQQIDBBCcml0aXNoIENvbHVtYmlhMRIw +EAYDVQQHDAlWYW5jb3V2ZXIxHDAaBgNVBAoME1NuYXB0IFNvZnR3YXJlIEluYy4x +DjAMBgNVBAsMBVNuYXB0MRIwEAYDVQQDDAlsb2NhbGhvc3QxIjAgBgkqhkiG9w0B +CQEWE3NuYXB0c29mdEBnbWFpbC5jb20wHhcNMjAwMTE1MDUwMDU4WhcNMjEwMTE0 +MDUwMDU4WjCBojELMAkGA1UEBhMCQ0ExGTAXBgNVBAgMEEJyaXRpc2ggQ29sdW1i +aWExEjAQBgNVBAcMCVZhbmNvdXZlcjEcMBoGA1UECgwTU25hcHQgU29mdHdhcmUg +SW5jLjEOMAwGA1UECwwFU25hcHQxEjAQBgNVBAMMCWxvY2FsaG9zdDEiMCAGCSqG +SIb3DQEJARYTc25hcHRzb2Z0QGdtYWlsLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAKIo9ImyCPk1+3jWiO8wC9zg3q/C9ZMUeGfoHVCf4N1WM5H6 +ld/isIQfnEiGIpf7cxpHIazoGkMnBTC4vdOp4JVH8C3ObOZXZiMUg6EDxRJCdR7B +ooOnYORV8MWYY0jCpgJ1fRVOs7c3CxzKD9q76r6/+UI2byIb1V51FXl80WuSmnsY ++E2DSLViG7lzG/bWL/GQoqhUuDt3UtjFJiBEV89AvHunETGOnZ3TkGfAygum7cid +pGHh1O1w4TeuCYGukIOYeY0EgK8LXOl1ILFwVom7/uN/ekp8KfRWPBbj2Oy54SSp +/oYSLCOJCGEnOpBFAe+hulQE1CVynMpzl7WID8uS6HxYszCfzPe0FZUTWn0hbULH +4z6EabdGskK0mb0ySHZq+fjI119BUoMKoLERC+HZw7nrD2TBVb9LLwwSm7+lneVH +wcG3tml+XUOSi7dV5gdMvW72ympnWD5jPWI0PkrH1e7veww/UlixDwzQ8QwduQNc +qTRoHUCmGNljUSHavTcN61hiLG6NyFoeErOPoR30LNixA014W/FORXDcDCzvfsHd +XhXUFAAODLKs4XTRV/b0sTQL+xi14FlLdQhNYQH8LVTpDZNFmsdlYih2iunsd1gU +JGmdwyA5pFyxAp8veJiA/KU2mugfUBoVk8BPz7rzLZSGSvzBV9ZuoIFcrBFzAgMB +AAGjUzBRMB0GA1UdDgQWBBRW+mW0lAVmhaCbX3SZbQPQhdTgTjAfBgNVHSMEGDAW +gBRW+mW0lAVmhaCbX3SZbQPQhdTgTjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4ICAQA92XAb3LiUpRYWI6w3E6Non95b4pR5sNypkHedCTP2TZyPN16H +CPtxJYV6MC3HVbpDcjo4KHrq5QIuZF+w+U3rp06DVgjBMghtoOvOBWTMtJJW8KWS +OzJFtdI2+WrJL4n9RcUQ0TFKja82y7HSinCwPHcoy+tIk5pdjDVC8w4N/5/slVJi +k418QqwM6CIWtZC5Hf1EbCKwzuR+0x5Q0UY5YeqnLSyR7qjqjp2ZgI/apdNmlQWq +M47iPGQtvyK8m0Z7Tw7mScaSd2ZIhQY5E390cGbGnnebOeKa2Ev+kfbG32dMhzQC +T9a+7k8IEX7Nak4T2FVKyCzfTFd0n7E6+R1Z0+r20e4M1DGScZIX8iMjs8Gc4Dlc +pStTulz+OjsvzRvfYhuKQimGA+z62jehmhd9gDr2IMEpBk7T2OoYsFq+9ulb9z+X +PPIOR4vYB4TUDgNbELypvrzHZvQjIyPT3sSq7J5ri151uhWiVoM4/IfnpQ0R0ysB +WR3b6Kz8qaQyXO/KAvWLUjnHbW2I8PxfUWmqigc9fb9TjLIAeSl94UR4NvloPIcS +FOq2pFMqYHBPi1SEET7WIj0BwDGpMh8OVc6iZ4Rgm43dTHneU2mcyQf5kn6IE0Bd +bE0NLRGxW6I/L4kwtQFynkZxxvpeGq9d0gtfe5Qd8AscGL+da40/S95pTQ== +-----END CERTIFICATE----- diff --git a/client/package.json b/client/package.json index da73421a8..cd6b2f079 100644 --- a/client/package.json +++ b/client/package.json @@ -2,7 +2,7 @@ "name": "bodyshop", "version": "0.1.0", "private": true, - "license": "UNLICENSED", + "proxy": "https://localhost:5000", "dependencies": { "antd": "^3.26.0", "apollo-boost": "^0.4.4", diff --git a/client/src/pages/jobs-documents/jobs-documents.page.jsx b/client/src/pages/jobs-documents/jobs-documents.page.jsx index e335a0797..95d7269a5 100644 --- a/client/src/pages/jobs-documents/jobs-documents.page.jsx +++ b/client/src/pages/jobs-documents/jobs-documents.page.jsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; -import { Upload, Modal, Icon } from "antd"; +import { Upload, Modal, Icon, Button } from "antd"; import axios from "axios"; import "./jobs-documents.styles.scss"; @@ -15,6 +15,8 @@ function getBase64(file) { function JobsDetailPage({ match, loading, data }) { //const { jobId } = match.params; + + console.log("match", match); const { t } = useTranslation(); useEffect(() => { @@ -65,6 +67,23 @@ function JobsDetailPage({ match, loading, data }) { ] }); + const test = props => { + // axios.get("http://localhost:5000/test").then(r => console.log("r", r)); + axios({ + url: "/test", + method: "get" + }) + .then(response => { + console.log("response", response); + }) + .catch(error => { + console.log("Payment Error: ", error); + alert( + "There was an issue with your payment! Please make sure you use the provided credit card." + ); + }); + }; + const handleUpload = ev => { console.log("Handle Upload.", ev); let file = ev.file; @@ -72,14 +91,17 @@ function JobsDetailPage({ match, loading, data }) { let fileName = ev.file.name; let fileType = ev.file.type; console.log("Preparing the upload "); - axios - .post("http://localhost:5000/sign_s3") + .post("/sign_s3", { + fileName: + "testjob/" + "adcd4c7b-029b-48c7-a1c2-8cf1761ce1dc" + fileName, + fileType + }) .then(response => { var returnData = response.data.data.returnData; var signedRequest = returnData.signedRequest; var url = returnData.url; - setState({ url: url }); + setState({ ...state, url: url }); console.log("Recieved a signed request " + signedRequest); // Put the fileType in the headers for the upload @@ -91,15 +113,16 @@ function JobsDetailPage({ match, loading, data }) { axios .put(signedRequest, file, options) .then(result => { - console.log("Response from s3"); - this.setState({ success: true }); + console.log("Response from s3", result); + setState({ ...state, success: true }); }) .catch(error => { + console.log("Inside Error here.", error); alert("ERROR " + JSON.stringify(error)); }); }) .catch(error => { - console.log("Error here."); + console.log("Outside Error here.", error); alert(JSON.stringify(error)); }); }; @@ -136,6 +159,7 @@ function JobsDetailPage({ match, loading, data }) { return (
+ { console.log("Hitting bucket: " + S3_BUCKET); const s3 = new aws.S3(); // Create a new instance of S3 - if (!req.body.fileName || req.body.fileType) { - res.json({ success: false, error: "fileName or fileType missing." }); - console.log("Error: fileName or fileType missing. "); - return; - } - + // if (!req.body.fileName || req.body.fileType) { + // console.log('req.body.fileName', req.body.fileName) + // console.log('req.body.fileType', req.body.fileType) + // res.json({ success: false, error: "fileName or fileType missing." }); + // console.log("Error: fileName or fileType missing. "); + // return; + // } const fileName = req.body.fileName; const fileType = req.body.fileType; // Set up the payload of what we are sending to the S3 api @@ -36,7 +37,7 @@ exports.sign_s3 = (req, res) => { res.json({ success: false, error: err }); } // Data payload of what we are sending back, the url of the signedRequest and a URL where we can access the content after its saved. - const returnData = { + const returnData = { signedRequest: data, url: `https://${S3_BUCKET}.s3.amazonaws.com/${fileName}` }; diff --git a/server.cert b/server.cert deleted file mode 100644 index 379c731cc..000000000 --- a/server.cert +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIECzCCAvOgAwIBAgIUFjwHhnj6LK35rYqhdtjDwjKspgAwDQYJKoZIhvcNAQEL -BQAwgZQxCzAJBgNVBAYTAkNBMQswCQYDVQQIDAJCQzESMBAGA1UEBwwJVmFuY291 -dmVyMRwwGgYDVQQKDBNTbmFwdCBTb2Z0d2FyZSBJbmMuMQ4wDAYDVQQLDAVTbmFw -dDESMBAGA1UEAwwJbG9jYWxob3N0MSIwIAYJKoZIhvcNAQkBFhNzbmFwdHNvZnRA -Z21haWwuY29tMB4XDTIwMDExNTAxMzgzOFoXDTIwMDIxNDAxMzgzOFowgZQxCzAJ -BgNVBAYTAkNBMQswCQYDVQQIDAJCQzESMBAGA1UEBwwJVmFuY291dmVyMRwwGgYD -VQQKDBNTbmFwdCBTb2Z0d2FyZSBJbmMuMQ4wDAYDVQQLDAVTbmFwdDESMBAGA1UE -AwwJbG9jYWxob3N0MSIwIAYJKoZIhvcNAQkBFhNzbmFwdHNvZnRAZ21haWwuY29t -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApbWK/AYHMMUe/i08tyUu -8AuMEF2JG9Vwmegh8zglMgfHxPBfrMu3AKzpMhTCsRQvWtrFLn0guk2dP9o7g1QM -oXrgv79MkAKCjbgVM+n9wRlEGPv1oa3ha8izJvBIHfMoHv6xJBFVpj3PwX+HM9Vw -CxxAtwxwfCaRlDYOKBD7EQ61K50+au01C5O7jvPp5ewOjZO0Zo415G9lohYHaqeU -HBIOstMnFUnMOi4quJ1OVHO4670LE1ewEw8164P8MjPX/QJC+KhmlUsLmDrNcNpM -ciWKYz+njTwey8/7Mr5/Q6srjRAwskvAg4usHaAL7vkxi7INmMpYmRSmas5TaLUg -sQIDAQABo1MwUTAdBgNVHQ4EFgQUecAjiUAYDt7MdbrWVYdQY0dBBK4wHwYDVR0j -BBgwFoAUecAjiUAYDt7MdbrWVYdQY0dBBK4wDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQsFAAOCAQEAIW4oMdEmrPji/Nl6EN/Mef3gkkTwEQsSGG5RM98g58vM -EwJ7/Xh10+Z1Az9oEZckk/L32bLOO9ciECZE+8WE8WjjQwG98cVcz+dThSXKZPPB -xBWjo0sDt5Y248ZXSEhBeUR/jIcG6wik2cCNVl+TVqwBd+KBeSpvf9E17I5cOKoa -+UUEWjsZm1Y7w+K9GqEjaTzdN+VI2iwKL/Be11+RioZrmSAWypL/kXmcffI3pQb5 -Ne63Tbb3znFGEqwlA95P+nZc+LYLAYPwQ+nQZU9fdqcAkT99QpUjD9ApwEEbvMpx -imJpO46Iq7UL7biBXPCLXqIwaNx7r8gQRi6YxFUFZA== ------END CERTIFICATE----- diff --git a/server.js b/server.js index 06219c2fa..95c8b337f 100644 --- a/server.js +++ b/server.js @@ -6,17 +6,8 @@ const compression = require("compression"); var enforce = require("express-sslify"); if (process.env.NODE_ENV !== "production") require("dotenv").config(); -const https = require("https"); -const fs = require("fs"); - -if (process.env.NODE_ENV === "development" || !process.env.NODE_ENV) { - var key = fs.readFileSync("server.key"); - var cert = fs.readFileSync("server.cert"); - var options = { - key: key, - cert: cert - }; -} +const https = require('https'); +const fs = require('fs'); const app = express(); const port = process.env.PORT || 5000; @@ -42,15 +33,18 @@ if (process.env.NODE_ENV === "production") { var s3upload = require("./s3upload"); app.post("/sign_s3", s3upload.sign_s3); -if (process.env.NODE_ENV === "development" || !process.env.NODE_ENV) { - var server = https.createServer(options, app); +app.get("/test", function(req, res) { + res.json({ success: true }); +}); - server.listen(port, () => { - console.log("[DEV] Server starting on port : " + port); - }); -} else { - app.listen(port, error => { - if (error) throw error; - console.log("Server running on port " + port); - }); -} +https.createServer({ + key: fs.readFileSync('./key.pem'), + cert: fs.readFileSync('./cert.pem'), + passphrase: 'Wl0d8k@!' +}, app) +.listen(5000); + +// app.listen(port, error => { +// if (error) throw error; +// console.log("Server running on port " + port); +// }); diff --git a/server.key b/server.key deleted file mode 100644 index 0c175f59a..000000000 --- a/server.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCltYr8BgcwxR7+ -LTy3JS7wC4wQXYkb1XCZ6CHzOCUyB8fE8F+sy7cArOkyFMKxFC9a2sUufSC6TZ0/ -2juDVAyheuC/v0yQAoKNuBUz6f3BGUQY+/WhreFryLMm8Egd8yge/rEkEVWmPc/B -f4cz1XALHEC3DHB8JpGUNg4oEPsRDrUrnT5q7TULk7uO8+nl7A6Nk7RmjjXkb2Wi -Fgdqp5QcEg6y0ycVScw6Liq4nU5Uc7jrvQsTV7ATDzXrg/wyM9f9AkL4qGaVSwuY -Os1w2kxyJYpjP6eNPB7Lz/syvn9DqyuNEDCyS8CDi6wdoAvu+TGLsg2YyliZFKZq -zlNotSCxAgMBAAECggEAZAlw2iyZcqvNxgxxNu9PosKVz9tnxlHYJFGrDTW73rQr -uYyTdbGVzOaV8RHvZw+UdvjTSPlpJI9uevm4K9Q1u9Z+j8Ng6R9ayUt0IV8FPemO -3rZc1zotd/A1lzA/mTUN54hCUE/WsQFnxpzCdlxHw61OtDLiRVDTWfI4IZ/+sZCC -qQC7hG3z0tchBiBkDghkbMmTTmzNk9OBvePNOYqpNvmm+hBes1IQPau9m7GBTgp3 -tPb7twEQOmU9OvGZxO9ryfh6JDbSI7lxaCRYwq8XDFM64H34lxrp9giMIz0J6nsR -XGPfog4lsqlZGMV+qyMpdwvzO2b79tIcmFx8HPEIAQKBgQDUh4NXhtrADYVuXTqB -s7aGRAUHS9lvlvYGx1L9NDKlVoi1gYYRONJM3uP+6lMQ0T+Qe2D3VllcY3qzt1tP -ufxYngXwnzIUhIuqtqUUmadv4E6FEj5zGDv+4HHf7nyxo0MmYzGxsZmNZeznaRcY -J4woiragUjNv6g9JnfAaWOlQ4QKBgQDHmmzZyXtNxp+G5znzCboBy9W/dGmwyl/J -8hj5aBLSV6yc9Cv6K1m8Y2q1qFpBPhL3PZ0CzGoHACri2KxU15xNvvsNf6HQLCjQ -mqFw18Tglc+fpz0JkDtPaC5JxzaC2zRByHDb/BPav7neVzaSt4xf4DTK8oKR1mZs -mSYK7jg50QKBgHwEk9UogU/e1AUB7BkxqIoS+Sg3z6s5WVm9SKUup3sp0t6vtW8p -TDbFPiBL1qsSn9gM1xmdzsmF11012tfcPO/tTqQKEaw9aE73A7/Qpg83wjoO2lhJ -RQFHMcwtm6ABGDc3XRFHBMapOqQTBAH5WeVyhH1rWk6tM7yOqESHq6ahAoGBAL5k -penDz1Lr4CU9EECsiXnHJfc+osYY8+/cd0gHptRu/t6j5gL2MN2K8zGeCaFsBYlC -gy81LvnIhh/lz9QJ6jUas7w3f3Djfnck2FOb7VbQb8B5NLaXloty85w6YtvFHf6V -pFmiBIpHEZNtG0gtvr+BTLo9QqC7ou151BjfDFDRAoGAO7+Zh/zW0N9j0Z/a4+8T -pkbXu9VBxlbUaCUm8ojKYpe5YIYyQWxO+2YTz/TpS5zlgZoMGtQcL8ZgZGS6v3To -E7spdcqza8vBqVZh/itx+cbTJvXN6LRzMZID/WyplnHxkwYbaBqgLPKcEooh/Iwa -7mM28slPg6nLerX9n1PupEQ= ------END PRIVATE KEY-----