diff --git a/.gitignore b/.gitignore index e18299c..77f02ce 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ build coverage node_modules npm-debug.log + +conf/*.json +conf/*.tar diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..f609f7e --- /dev/null +++ b/.travis.yml @@ -0,0 +1,35 @@ +language: node_js +node_js: +- '6' +cache: + directories: + - node_modules +env: + global: + - NODE_ENV=staging + - URL="https://matchmyroute-backend.appspot.com" + - secure: on4jgkRvu0rt9ThaqcMW9OvlTjVkfSDekhRAT2oDa7cYppvqRKxQyYCivWinlKsDPNF5MD13tZO4VpvezvmhT1YIPSkEejLt2+U7AypxYlM4R7EVBwhpIH1KDpjuJYeDMiq6gcFEaWl5DVrey39MZArrNip01co5uEnFDmyArk90M2iR2tySatTjqy4ZMZrhbgXOxsin7AjJejx+5KGpekAvId2infmQt1EKlOUoRsp/HHOV0qaK1DpevBNdbl2rHzKm0x07xP5bQaf3FKgm82qx9NPyl/bmczBQ+J6vbneP0kN/yRce9ipchoSaCrRn7V69CUYfioDBT/ddY0ae7ow7rLPKuDrdKZcgGOKo6uYAlnh235yzEi7R61UvuVZAb46ltRnsVjOt6Igxmh4xg9lvW5Yr5241jKpggqvyEz4LrQxFkMwwA3QhLE3CLE5+8QbS/+tjYM7mjL7LVPNvoUS2qGV0HSPlGDmUmDRhwUVZO2/MmH+Io7smVjIuDaDF4xfhwhlHA/G94xOkKr036fIpcSgK1jvK69dwwHQfxAR0tdYF8XamylrNUWlXjIZ1Te2uN4S8aO25S7/ChOBqJjI9tXH3f1WiYos63Z3Svp3JcK2eYV38ov7Zy0YQkxR4Abhum9GUzRF+VGpauThM1CWQu57nbbK5Eb/Mw55xTt0= +addons: + postgresql: '9.6' + apt: + packages: + - postgresql-9.6-postgis-2.3 +before_install: +- openssl aes-256-cbc -K $encrypted_0e3badaffc60_key -iv $encrypted_0e3badaffc60_iv + -in ./conf/credentials.tar.enc -out ./conf/credentials.tar -d +- tar xvf ./conf/credentials.tar -C ./conf +before_script: +- psql -U postgres -c "create extension postgis" +- psql -c "CREATE USER testuser WITH PASSWORD 'test' SUPERUSER;" +- psql -c 'CREATE DATABASE "matchMyRouteTest" WITH OWNER testuser;' +script: +- npm run test +- npm run build +deploy: + provider: gae + keyfile: "./conf/key-file.json" + project: matchmyroute-backend + config: "./build/app.yaml" + skip_cleanup: true +after_deploy: +- npm run e2etest diff --git a/README.md b/README.md index 872e957..7846faf 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ -MatchMyRoute Backend +CityCycler Backend ==================== +also known as: matchmyroute-backend (which was the pre-release name) + ## Install Install node and npm, then install this project's dependencies: @@ -143,7 +145,7 @@ If you want to revoke accounts, you can do so with: ``` gcloud auth list -gcloud auth revoke james.gardner@geovation.uk +gcloud auth revoke john.smith@smith.com ``` If you want to see all the HTTP requests and responses during deployment you diff --git a/circle.yml b/circle.yml deleted file mode 100644 index cd627b2..0000000 --- a/circle.yml +++ /dev/null @@ -1,40 +0,0 @@ -machine: - node: - version: 6 - environment: - NODE_ENV: staging - -dependencies: - cache_directories: - - "/home/ubuntu/.config/gcloud" - - "/opt/circleci/nodejs/" - pre: - # - wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 - # - mv cloud_sql_proxy.linux.amd64 cloud_sql_proxy - # - chmod +x cloud_sql_proxy - # - gcloud config set project matchmyroute-backend - # - ./cloud_sql_proxy -instances=matchmyroute-backend:us-east1:matchmyroute-database=tcp:3307 -credential_file=conf/key-file.json: - # background: true - - psql -c "CREATE USER testuser WITH PASSWORD 'test' SUPERUSER;" - - psql -c 'CREATE DATABASE "matchMyRouteTest" WITH OWNER testuser;' - post: - - npm run clean - -test: - post: - - mkdir -p temp - - tar -cvzf temp/build.tgz build - - cp -a temp/build.tgz $CIRCLE_ARTIFACTS/ - - -deployment: - production: - branch: master - commands: - - sudo /opt/google-cloud-sdk/bin/gcloud components update -q -# - sudo /opt/google-cloud-sdk/bin/gcloud components install beta -q - - sudo chown ubuntu.ubuntu -R /home/ubuntu/.config/gcloud - - gcloud auth activate-service-account --key-file conf/key-file.json - - gcloud config set project matchmyroute-backend - - npm run deploy - - URL=https://matchmyroute-backend.appspot.com npm run e2etest diff --git a/conf/.netrc b/conf/.netrc deleted file mode 100644 index cbd6502..0000000 --- a/conf/.netrc +++ /dev/null @@ -1,6 +0,0 @@ -machine api.heroku.com - login sebastian.ovide@geovation.uk - password 25476055-73f6-429d-b72d-75212b11f77b -machine git.heroku.com - login sebastian.ovide@geovation.uk - password 25476055-73f6-429d-b72d-75212b11f77b diff --git a/conf/credentials.tar.enc b/conf/credentials.tar.enc new file mode 100644 index 0000000..277a5f9 Binary files /dev/null and b/conf/credentials.tar.enc differ diff --git a/conf/info.json b/conf/info.json deleted file mode 100644 index 72abc83..0000000 --- a/conf/info.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "some field": "put things here" -} \ No newline at end of file diff --git a/conf/key-file.json b/conf/key-file.json deleted file mode 100644 index ee40757..0000000 --- a/conf/key-file.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "service_account", - "project_id": "matchmyroute-backend", - "private_key_id": "98b179e776b961530c361b48eab673d239c1723e", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC98nIU8WGXB9nA\nzWsu9ZWi/5OmJFOwAAPnDJnquSSgdwQ+L7s2wOryVX3zFQ8MqbjKDxG2krObgjSv\nUNO8M8vPk1C/driyTNxEomgN0zdBloNT3C+xc4XNwS4x1xBe0595G7jKTxeBqO4D\n4DOAKJoWZ5R0srKJA27RBsZJ54X9mo557L0Mtaj/cBNhJq1ktgIo2t0CWsSyCQCF\nZjtv2k13Nr4I8/jp5kBgMSvwnQK8ZT89NM1jbwi/y7sS3SgZCX65suSOrqcK+i5b\nwYPzkeEagoJ7foXPRqAyOB6uR3y6iPeejH1nP45NazWdG1of87fyahfj48kEeUZ9\nEOCaYTGLAgMBAAECggEAR09p/OrSFH1iBrwX7T1NvC/vIoSo1n5q+KcGcdSoJ4YH\nFcGdq2Spz+jArC3PxJVDRrh5ke1peIxdcyQJGbLoZTmNKxRLKsUoPKwsHGSbbggv\nraAQV7JjHWfVC+kNwEv6puD9cxZWYNsm4FWfgBG+J4MjfNxJop6jT94XO0+sQhTK\nrYpF4Pr90cjceIh1KMOQn4CsmLNCdTyJbgBXZUcoohhXezr2WLkJ4BewnLSm+Xuc\neKTDi4eUV1nVVS9JQSw2dK44gTQnzJrlvy0RmeQTjnmkWm0Tvq6vq8dxk1tNA82H\n2pzNHzT3YlIid2Xqh18KkM0eHoKVgcJwO1uBeveZAQKBgQDcz720SmGYLP8QQU5E\nPs89/+/IEAAJnwXM0rXQlnN+HqB1rsaDQFDS1lstzPOd2qNJysoPXZlt+xw2OdjJ\n9AwY1enhvKlNapGIentYA3wMaIzRJBoUcBr9txonGD+I9JU8yfH8zQa+lSq61vzp\nrtqO0kbVt2NNk7MvbsTBhY/oYQKBgQDcN43uoUYNcVuDYWLRmYMdhqxHABcbtYEn\n2griEk9maS7Xpts+xRm1XImyg1TJFCxb3ofqWB/wGVEJP69waRrzmBKfhdnOUa3A\nyTsCdErMDa0UT62LmCncuOOk+/016mJQ0yPZQFgfrX+Q8OZGWfEPp/x7B5QLBfq3\nuqU4MZCxawKBgQC942zJaZnKCxABw5dx+u2v7LQgwRm3LGkJfj7atTd2wxHMglO2\ntY2L8skQdwsdudLod5sSYbS7LtJRE6gJ7HSmuvbZqKuTpsymqGYAB2cbKKHIjRpc\nbxfXDipQanrg5SydzTDr7MkbBh5r9MwkjbjoT46Y5Y9hPF5AsSpFHf3moQKBgART\n8y4lbUMGX04Ns+t6oOELrIcYsVuSDZ/C4UPgKD9TAeCrHtP0+7RcxTgE7L2m79g+\nX11zre0CEl2kKsaCykzPSE5qSwWLBWcsjURXFME945Dqn/aGXww/dfngGfHdUWFV\nRPcYFKNKvZ8TnPL1AY/VNVkVpQsyauMBgA3Cq51RAoGBALTqvTPOxN4HgSEgacTZ\n9MiwVk0S6QtB+qTdgHKIaliXu9paxz8HRSnzhMU3Q2PfnTpCSZE8V1eh93nB4rjh\njdDXSA9HOjF2WrB3njZ2sQ2UGoqa2899SX/dab8D0dqhUmZ9bbR9Mwwhi50ofBMC\nl/wktZWDDz5MvQYbB3nkyG5W\n-----END PRIVATE KEY-----\n", - "client_email": "circleci@matchmyroute-backend.iam.gserviceaccount.com", - "client_id": "113509986719168488323", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://accounts.google.com/o/oauth2/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/circleci%40matchmyroute-backend.iam.gserviceaccount.com" -} diff --git a/conf/matchmyroute-backend-firebase-adminsdk-jm5jb-e33eab9419.json b/conf/matchmyroute-backend-firebase-adminsdk-jm5jb-e33eab9419.json deleted file mode 100644 index 80f15bf..0000000 --- a/conf/matchmyroute-backend-firebase-adminsdk-jm5jb-e33eab9419.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "service_account", - "project_id": "matchmyroute-backend", - "private_key_id": "e33eab9419a256fdb401c7426096f21d9383d1f7", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCbFCTsgpa4yMXy\n7MAgOQNbw/qQojTpK75TKa96SVBR53LSLY8CaJT6HF6vcrm2qQ4kzAJKlnHCzRqj\nc8ak3z7pWTLg6HOje49fsQ915vFlJ7076KH97oQXkr8KIL8gOEORnS9BNkAMDBrR\nPWECy4w+6y8I5G0sIfbTVV9xCYLHYRkNGob3g4dGe5mo+sJ4g9IvIAAs1KF/7iBc\ndkB/bCQpU8jCg5cXNDsg0EwKEQEdU0KPy1Z/S7yRoPPxJ6fS6jF2Zse3O5EhC6Jd\nf5Gm7pVGEz0ND4d85MJMYSZjUqHkZgBzex6lXkiHMD1O6FbwNcGUwEb20tqJ5ATZ\ni1MZGatXAgMBAAECggEAJGWacu4FXPI2T1kUkJuA98kr5kVDwNQU8+TNPBi34rk9\nICo0Ld8I1BjTej8lakMMQEOnaAUeRxenYGR8Y1bIJ7FZOSMlfOGzmURvuf7Nei3V\nApoLZxNTakr1TnW4FeJOrX7kR9xpNMqkgqZyvdqzHFNLcz1ViC2ihiA76cZPLOb1\n/mRkJJ+JBUUyIT8dxLc9mWFdLPtvDUm7WNAnAQYJqND83kEevEYXcBN4B/xn3Xq/\nSFi+jMqUExVDBLkTGKbO0+4LiS6gqXMSzoUM93kO2keS0Px0lt776/id9x3fBhbO\n16On/sB0+FZzzIymFTiar25mSotgsZcOBpt0YNXLIQKBgQDQv+nMp4KxdGWNIaHr\ni1hZbfEgs2fTnYbkIGVJgKSCaVV0q6/jePvUpGF9d/8/yt9dwO8dKpHOOszxb5sb\nU9nZGo5L1QQMtow/e6psmRMjZi+7CcrVkw3e1a1bbh8UXmL0q3u690KqYipwNoT+\n4CVvb9HKeHJe8X9sNC9+4Gd+IQKBgQC+Lj5w+0kZLfqY7MBAvU2m5Xdcuf/dTyEy\nn1GrQbO9bin0vDqdt5Zy0OZFcDN+ZqfohJjack7IgZAPwSIq2q/sEJHd3iLy2hAB\nKtl0ok6tl/t0wV1Ix7gikVkDOaRCZ3/DplYfwpJbLvXFdLfQsjEo6OOjsrNpqZ9+\nx4lEAHjKdwKBgQC1qz9Cn0mLPBwgzfNHtVZnRdoCtn+WV9KL+HGNnUoOQLNhPQVu\nttybO4+ojOTz1I+93Ol7/Y805lFzkMhw6PF/ErBh6HmEwt2dZfd0WWeheA3z/dqr\nMjZxBo6/MkAUDuyZuB+PIB7Bf3slex0VX2bU64Ctb1NBs3RMa8Il7g/DYQKBgFVg\nUz3LQWShZIe0eRZXJX4QM4aYJYpHlMKyDSrRowweYY1x1uqo2UyQBWAU37kWArj6\nldgzSrTunSrFbD5K0IEsax9sMspNJLQxdU/L8YAy43rlt6gNqNcz4v70qI37Artl\nd/JoGeX/bewH2uFArZsM+eyqM6rysBxtHW0+vPs/AoGALHmseqPiU3+KtU0EdDoZ\nA6CR8nHXjM8aLlLonvZF+uJObHqXX8V58zul2VF+bWhs9ZhQlDsIErf2PiaVsBml\nRBfjmzJas4edsK+hLVSh2zOiYa3Kpl9zJ7yznM9AxXcSuImgmOP1KJlBtg4sQH9S\nEjocYsdlHJow91qvU3mZUoM=\n-----END PRIVATE KEY-----\n", - "client_email": "firebase-adminsdk-jm5jb@matchmyroute-backend.iam.gserviceaccount.com", - "client_id": "105828049435136100953", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://accounts.google.com/o/oauth2/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-jm5jb%40matchmyroute-backend.iam.gserviceaccount.com" -} diff --git a/conf/storage-keyfile.json b/conf/storage-keyfile.json deleted file mode 100644 index 15e026c..0000000 --- a/conf/storage-keyfile.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "service_account", - "project_id": "matchmyroute-backend", - "private_key_id": "21311b14e0fa92774f28d47b3254f0701b7f5cba", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDfZQm/dkCl2w5/\nHZ2xXilskxA2ILjQfZxK6LmlKRmY+OWUpuR8Y/MS/8RWayWt3h9DmKi9+S11E0L1\nONNHV+kb/4avI+xEcejLmb4GED/4w387HNMNFm2TF6/WaOUIOfLm7i6+11gYAIjm\nRF3swswglKc7Z5ubDJSXd4As4GvV3TC4irsAUPjSUPREyKLGLYYsrgwtkK/9p1Mu\nzcLqxPZFOW4av7Lh8yMpi0ki0MOkttHd2jkzQAGdy3FeeJPWd1TSX1VgD84aVqvj\nnq8/ZUDIb4bg07nHx3NYKWIa6/XGXC01iBnEDWR2bPLHNW1tSLHfGrOSfBfSzvIY\nyJJ3kS6NAgMBAAECggEABxjMoHp/P0WgRkWIlvPo2PwrDa0ocecrqe2OyEJv/74Y\nfQp4Q8NhG39om144Cjf+QkV9Rtu9p/R+sg+mFqQiUbNicfnwLZR40s8FjGfDwIFl\nb1lREx9dR8j+2w7mB8bfgpqafZGVyN1re/U8DqN5nKdcULTP6rMRnWY8ejB+/IJF\nMNme4IpdqCTxAIuEkV3EW+rWyH5+E0to+9Lj1QJM4rQjtpM1UQix/UoP501ltWj1\n2jJnMBwxB/+PAOrOBi7iDSmsZ7b7tX7GHfL/jrEuhcOn20VFmFZgzAKnuDqFzamO\nVaVgo1SnF9sEmm46o1Bb3VQmQ+nn1BqbaXY5zhVUQQKBgQD1cz/a/SSsi8CeOsYP\ngZqlK6qGgsKOINAMvrD9kBjZRMzSN1kalPwSwuFJapz7qybSqAzrEawl+TTjTZrY\nPdhgtBUHeQzZVR5SYVwdtZpV1j6iSMXfZdpjn0VD3viY1RNus0CNrOHYi1Tt9EVi\nsXZ5BWBr5bfiMsYhkAEuu9h1pQKBgQDo/xszW8vfw2qR3DSbB0yUj/2Is0FlwxU2\nTTUot5zhHsq+eYsBCBtVgXZ0m8MG1Je2B8i1WnX2LbzLfJn9YWyC/Z34JwZ4RwFP\n1EJiHUCQFhKxFVVO/tMZwc+9euAtdSy1wQYZKPafSIdc7iHU7xho18IzApIS8xnX\nqE0DS7CQyQKBgQCR2J+S4mSOWqRj4QybXimkB6RWNRCiH4FAcXb91EfPooAKUXUS\nxIBcLYxscXtCV9rDxbOXYnLmRYRVpGFkKKuQGrF8NUObSGayEMQJq0U/yASDrbZW\nHlF8bMFdqPoS5lmbp8ut45J3d6NJmaI5GLYLB1TaCDARqpXsj4MEX/4pOQKBgQDf\nFpPWwwgcAiHh8vQzk/ORM6VP5EKzyuxeh+JkUBpXuoHpirq7jCWP41umHxXHTnrM\ngft9GVZlFjn0pCNVZpjdezRrzAH33BS3eMbu5o9Q5rGS+JgsAPXjbZ0ZEbPgEpdy\nl5TdNkmdDXb+Vcvy89NtX1jEOqvelQGjabQDec9fcQKBgQCcIPP0QzQvpB+p/59I\nVUxc4Ds75vmuMsqjfxW/gVLseHEeFzl7vNu9nSgEO0UOhU8jAYH1z7n0OehWcHx8\nbl32dJB+klao95T+ZRFxVZDsC6ItEvLT/2hJJYLXQbQc7Ik4pXydNNah0ctqHsrk\nOfK+RGFBLCyLlWbb6UTNxmKKzA==\n-----END PRIVATE KEY-----\n", - "client_email": "storage-service-account@matchmyroute-backend.iam.gserviceaccount.com", - "client_id": "111631627276945781581", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://accounts.google.com/o/oauth2/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/storage-service-account%40matchmyroute-backend.iam.gserviceaccount.com" -} diff --git a/conf/watermark.png b/conf/watermark.png deleted file mode 100644 index 31a2ca7..0000000 Binary files a/conf/watermark.png and /dev/null differ diff --git a/gulpfile.js b/gulpfile.js index 78e44d3..091df81 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -104,7 +104,7 @@ function getProductionEnvVars() { STATIC_DIR: "static", NODE_ENV: "production", PGUSER: "postgres", - PGPASSWORD: "aUZw[:Gw38H&>Jf2hUwd", + PGPASSWORD: process.env.PGPRODPW, GOOGLE_APPLICATION_CREDENTIALS: "conf/storage-keyfile.json", STORAGE_BUCKET: "matchmyroute-prod" }); diff --git a/src/common/auth.ts b/src/common/auth.ts index 7155f32..18e6c15 100644 --- a/src/common/auth.ts +++ b/src/common/auth.ts @@ -10,7 +10,7 @@ export const minimumHashingRounds = 30000; initFirebase(); function initFirebase() { - const firebaseServiceAccount = require("conf/matchmyroute-backend-firebase-adminsdk-jm5jb-e33eab9419.json"); + const firebaseServiceAccount = require("conf/firebase-admin-sdk.json"); firebaseAdmin.initializeApp({ credential: firebaseAdmin.credential.cert(firebaseServiceAccount),