Fixed S3 document upload to have minimally functional model

This commit is contained in:
Patrick Fic
2020-01-14 21:42:29 -08:00
parent 1d9aa8061c
commit d61112dc18
8 changed files with 145 additions and 89 deletions

35
cert.pem Normal file
View File

@@ -0,0 +1,35 @@
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----

View File

@@ -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",

View File

@@ -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 (
<div className='clearfix'>
<Button onClick={test}>Test</Button>
<Upload
customRequest={handleUpload}
accept='.pdf,.jpg,.jpeg'

54
key.pem Normal file
View File

@@ -0,0 +1,54 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
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
lprkK8/B3YTkfi7ZmfapZA==
-----END ENCRYPTED PRIVATE KEY-----

View File

@@ -13,12 +13,13 @@ const S3_BUCKET = process.env.bucket;
exports.sign_s3 = (req, res) => {
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}`
};

View File

@@ -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-----

View File

@@ -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);
// });

View File

@@ -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-----