Skip to content

Commit 466ee5e

Browse files
committedAug 29, 2024·
feat: use https for backend and add test cert
1 parent 8bec6e5 commit 466ee5e

File tree

12 files changed

+80
-10
lines changed

12 files changed

+80
-10
lines changed
 

‎packages/backend/.env.example

+8
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,11 @@ HAT_ID=""
88
ETH_PRIVATE_KEY=""
99
# The RPC URL for the EVM network
1010
RPC_URL=""
11+
# The path to the TLS cert
12+
TLS_CERT=""
13+
# The path to the TLS key
14+
TLS_KEY=""
15+
# The port to listen on
16+
PORT=""
17+
# The IP to bind to
18+
BIND_IP=""

‎packages/backend/cert.pem

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDDDCCAfQCCQCdGYDNX5c3CTANBgkqhkiG9w0BAQsFADBIMRMwEQYDVQQKDApI
3+
YWNraW5nUFNFMRMwEQYDVQQDDApoYWNraW5ncHNlMRwwGgYJKoZIhvcNAQkBFg1h
4+
ZG1pbkBwc2UuZGV2MB4XDTI0MDgyODEzMTcwMloXDTI1MDgyODEzMTcwMlowSDET
5+
MBEGA1UECgwKSGFja2luZ1BTRTETMBEGA1UEAwwKaGFja2luZ3BzZTEcMBoGCSqG
6+
SIb3DQEJARYNYWRtaW5AcHNlLmRldjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
7+
AQoCggEBALXbdoVtb/XxjBUYK9Uj5FSTNbUOXnsdjBwTCGWWvnCqwIoGAQIybY5K
8+
ZTj7x+mbE0el3444s7Qo5yX8BQwFjKoLVHuVjZde0MTD3zVoWur+bnAgkWhTOi7o
9+
Hsb2znaRLuzJtyIKBWZM56zB0xbbFWADrQCjxSkh4GKCL2zVofRGOU2vP7n1n3nZ
10+
thhrPDfLf0bt9RmuopZMD+13s/DNJt1SPj/RJT2KU91cfLT/8e7lzzXpTJ1XUHRm
11+
7e0C8hjlxUUeUWSxMkBQHoRrpxU+LRRhbFTFE6KOnlVQJo6JkOaaMOuxwZu0dZLO
12+
QVKwHbsi87uRMloTZw+zxubTzgiSB2kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEA
13+
EZUTjI3AMyll0amgZIVx35OVLpSADHhG3NYGiqyVEFXSTEg0Crlc3DPIc8EzZqSX
14+
DelIz20G/A4kzM8Edep6ngMkaYw7K9O96uu9JFnEIUCWlqErWFungSaQ9D+tWu5/
15+
3UwiDwnnDMgSwrwoYmB1Bcgv59Fjq21tOotcu9ZyOR01d4p5prF9mLEPofPUpnmi
16+
Y3TY1j/L0dcn11GUrRJl7uM/Xm4O06P6+I20Mo5FOnaLelv2tjwObv5W6Tj4wre4
17+
cCihW9f9SYN6txFNfXm5E8H3TlL04DonBDqrfhX/5PF+asfKDZFpY4ZiccbfTHO9
18+
hGYPi2ACDil9nR7Xamnw1A==
19+
-----END CERTIFICATE-----

‎packages/backend/key.pem

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEowIBAAKCAQEAtdt2hW1v9fGMFRgr1SPkVJM1tQ5eex2MHBMIZZa+cKrAigYB
3+
AjJtjkplOPvH6ZsTR6XfjjiztCjnJfwFDAWMqgtUe5WNl17QxMPfNWha6v5ucCCR
4+
aFM6LugexvbOdpEu7Mm3IgoFZkznrMHTFtsVYAOtAKPFKSHgYoIvbNWh9EY5Ta8/
5+
ufWfedm2GGs8N8t/Ru31Ga6ilkwP7Xez8M0m3VI+P9ElPYpT3Vx8tP/x7uXPNelM
6+
nVdQdGbt7QLyGOXFRR5RZLEyQFAehGunFT4tFGFsVMUToo6eVVAmjomQ5pow67HB
7+
m7R1ks5BUrAduyLzu5EyWhNnD7PG5tPOCJIHaQIDAQABAoIBAF18Vi89FOMfqt1l
8+
MZM+AjCgBGnw2wz7IX2FIznmBjww6w2JDJeuiLcu814ZwKkMORsJ4CRiba7doAXc
9+
ylNlvuvjKyjktobsDPI5ptLztFk9NlSZyWYR8sUOOlQZqAU3mSHMiEINWL1AJ5Cd
10+
iwAi25giC5talQ4SBiFdvzd5kunZGcmQv8jnIs3eA6PbuNK7O+JrqXVmtd8hCOyQ
11+
G8zOL5qEh+gSrUYz+aU5hB5H7LdmWnXwqfM3zSQ3Db+M78dIgMgd932Miuryk7yI
12+
NUf4rnSIPjWHd716/9baSi41NmhzjCpZXwcTBeSdqRn1dcS2tND1KG1x4pFPfbz3
13+
kTlonqECgYEA3iC6pVUvmzS/CtYAvxKiH73sbrTqmaNvsbMFPPJVYBLf1m2BXtNw
14+
bmG7lUidB970oj2fNDZO6KcTcdf7psm0B0QQtgINIj5MJG0Cmkw/h2VjL9xSLkSm
15+
zaNanx/unlm0Tq5CGgdx7FZ5yDyrKZm++o4kQF64WjWySvcz42U9jD0CgYEA0Zat
16+
/FvQs+Ih7+RNq19Gp2QcMoLa9UjTVyY98JycrDSJ8W3l5lpJUDxG6Pmdicq9gW9K
17+
qJDXvZ8f48y6tFY6grbiW7JdubiSBY6amEfVGCQdM+5p1CQWy6aXKRz/+ZrCIoKx
18+
tQpnbZBf+sSp2O0AY3CsmLkXucYJNi0xz13Rfp0CgYBcOIhlJgXa0T5TuF+c9JZ8
19+
yTRFDjWsTc+Mnj+Zex75AT0PYG1quiwel9LyerA/WVCFn0HewoFmVB9dj4c6StnE
20+
fnzVo+piAi1Inj2LZAaoJu7UKwuvi+8Yxy5TjEVcVu/mDrEA74Bb19c9y/pgDiXd
21+
DnB8jRbK1SpNt25ChYDVHQKBgQC4sFYbFnF/wlpzgbRrumaRZSdv313BXe5WUq2s
22+
VOW+3gFcjaJUbeVC3gsCi8wmO1DpOUAJ8LEcOJeqbqNr/LxMqYookbID0cBjQzm5
23+
zTrbrh9JvuLk/PRVezSjFxn+Q0CllpOwXD2uD9Z0LU8aiCaaehSt9BUTMI63ffXx
24+
rNPKBQKBgEYlIIyjnfDvCGs54ypKTEPtR0LgD1MjZ+av2b2REtNFfhL8a6sZt1Hl
25+
6QzT8cx0oCEHtN/vCLuEqDn+QKOlwU5bwY/FDO1nryyXDatzzMhoj8k2zzWJJVFJ
26+
ehY6/iF0mIwCfW6dmx8vt3P5uG261pBIJZyLGhFwCEeM9ww/lMI9
27+
-----END RSA PRIVATE KEY-----

‎packages/backend/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"description": "The backed for hacking PSE",
55
"main": "index.js",
66
"scripts": {
7+
"build": "tsc",
78
"dev": "ts-node-dev src/index.ts"
89
},
910
"keywords": [],

‎packages/backend/src/constants.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@ export const HATS_ADDRESS = "0x3bc1A0Ad72417f2d411118085256fC53CBdDd137"
55
export const SEMAPHORE_ADDRESS = "0x71B93f8b0583f4033FAA1EE47d448B572933cefe"
66
export const HAT_ID = process.env.HAT_ID || "0"
77
export const CHAIN_ID = "11155420"
8-
export const PRIVATE_KEY = process.env.ETH_PRIVATE_KEY && process.env.ETH_PRIVATE_KEY.startsWith("0x") ? process.env.ETH_PRIVATE_KEY as `0x${string}` : `0x${process.env.ETH_PRIVATE_KEY}` as `0x${string}`
8+
export const PRIVATE_KEY = process.env.ETH_PRIVATE_KEY && process.env.ETH_PRIVATE_KEY.startsWith("0x") ? process.env.ETH_PRIVATE_KEY as `0x${string}` : `0x${process.env.ETH_PRIVATE_KEY}` as `0x${string}`
9+
export const PORT = Number.parseInt(process.env.PORT!) || 3001
10+
export const BIND_IP = process.env.BIND_IP || "0.0.0.0"
11+
export const TLS_KEY = process.env.TLS_KEY || "./key.pem"
12+
export const TLS_CERT = process.env.TLS_CERT || "./cert.pem"

‎packages/backend/src/index.ts

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
import express from 'express'
22
import bodyParser from 'body-parser'
33
import cors from 'cors'
4+
import https from 'https'
5+
import fs from 'fs'
46

57
import { sendOtp, verifyOtp } from './otp'
68
import { getDb, initDb } from './db'
79
import { hatsClient } from './hats'
8-
import { HAT_ID } from './constants'
10+
import { BIND_IP, HAT_ID, PORT, TLS_CERT, TLS_KEY } from './constants'
911
import { account } from './account'
1012
import { SendOtpSchema, VerifyOtpSchema } from './types';
1113

1214
const app = express()
13-
const port = 3001
1415

1516
// todo: update origin to the frontend domain
1617
app.use(cors({
@@ -113,8 +114,12 @@ app.post('/verify-otp', async (req, res) => {
113114

114115
// init db then start listening service
115116
initDb().then(() => {
116-
app.listen(port, () => {
117-
console.log(`Server is running on http://localhost:${port}`)
117+
const httpsOptions = {
118+
cert: fs.readFileSync(TLS_CERT),
119+
key: fs.readFileSync(TLS_KEY)
120+
}
121+
https.createServer(httpsOptions, app).listen(PORT, BIND_IP, () => {
122+
console.log(`Server is running on https://${BIND_IP}:${PORT}`)
118123
})}).catch((err: any) => {
119124
console.error('Failed to initialize database', err)
120125
})

‎packages/contracts/.env.default

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
SEPOLIA_RPC_URL=
22
PRIVATE_KEY=
3-
ETHERSCAN_API_KEY=
3+
ETHERSCAN_API_KEY=

‎packages/interface/.env.example

+2
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,5 @@ NEXT_PUBLIC_TALLY_URL=https://upblxu2duoxmkobt.public.blob.vercel-storage.com
9191
NEXT_PUBLIC_POLL_MODE="non-qv"
9292

9393
NEXT_PUBLIC_ROUND_LOGO="round-logo.png"
94+
95+
NEXT_PUBLIC_BACKEND_URL="https://localhost:3001"

‎packages/interface/src/config.ts

+1
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ export const config: Config = {
114114
pollMode: process.env.NEXT_PUBLIC_POLL_MODE ?? "non-qv",
115115
roundLogo: process.env.NEXT_PUBLIC_ROUND_LOGO,
116116
semaphoreSubgraphUrl: process.env.NEXT_PUBLIC_SEMAPHORE_SUBGRAPH,
117+
backendUrl: process.env.NEXT_PUBLIC_BACKEND_URL!,
117118
};
118119

119120
export const theme = {

‎packages/interface/src/env.js

+4
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ module.exports = createEnv({
6969
NEXT_PUBLIC_ROUND_LOGO: z.string().optional(),
7070

7171
NEXT_PUBLIC_SEMAPHORE_SUBGRAPH: z.string().url().optional(),
72+
73+
NEXT_PUBLIC_BACKEND_URL: z.string().url().optional(),
7274
},
7375

7476
/**
@@ -109,6 +111,8 @@ module.exports = createEnv({
109111
NEXT_PUBLIC_ROUND_LOGO: process.env.NEXT_PUBLIC_ROUND_LOGO,
110112

111113
NEXT_PUBLIC_SEMAPHORE_SUBGRAPH: process.env.NEXT_PUBLIC_SEMAPHORE_SUBGRAPH,
114+
115+
NEXT_PUBLIC_BACKEND_URL: process.env.NEXT_PUBLIC_BACKEND_URL,
112116
},
113117
/**
114118
* Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially

‎packages/interface/src/pages/signup/registerEmail.tsx

+2-4
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,8 @@ const RegisterEmail = (): JSX.Element => {
3333
const [emailField, setEmail] = useState<EmailField>();
3434

3535
const registerEmail = async (emailField: EmailField) => {
36-
const url = "http://localhost:3001/send-otp";
3736
try {
38-
const response = await fetch(url, {
37+
const response = await fetch(config.backendUrl, {
3938
method: "POST",
4039
headers: {
4140
"Content-Type": "application/json",
@@ -65,8 +64,7 @@ const RegisterEmail = (): JSX.Element => {
6564
const { otp: otp } = otpField;
6665

6766
try {
68-
const url = "http://localhost:3001/verify-otp";
69-
const response = await fetch(url, {
67+
const response = await fetch(config.backendUrl, {
7068
method: "POST",
7169
headers: {
7270
"Content-Type": "application/json",

‎packages/interface/src/utils/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,5 @@ export type Config = {
105105
pollMode: string;
106106
roundLogo: string | undefined;
107107
semaphoreSubgraphUrl: string | undefined;
108+
backendUrl: string;
108109
};

0 commit comments

Comments
 (0)
Please sign in to comment.