From a0e9806db1d5ebc7339895e93ef3d99808a4e1b5 Mon Sep 17 00:00:00 2001 From: Jamesbillard12 Date: Wed, 6 Sep 2017 13:43:36 -0700 Subject: [PATCH 01/10] inital commit --- frontend/.babelrc | 4 ++ frontend/package.json | 39 +++++++++++++++++ frontend/webpack.config.js | 87 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 frontend/.babelrc create mode 100644 frontend/package.json create mode 100644 frontend/webpack.config.js diff --git a/frontend/.babelrc b/frontend/.babelrc new file mode 100644 index 0000000..47c9ace --- /dev/null +++ b/frontend/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["es2015", "react"], + "plugins": ["transform-object-rest-spread"] +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..dc51e76 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,39 @@ +{ + "name": "frontend", + "version": "1.0.0", + "description": "", + "main": "webpack.config.js", + "scripts": { + "build": "webpack", + "watch": "webpack-dev-server --inline --hot" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "babel-core": "^6.26.0", + "babel-loader": "^7.1.2", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-preset-es2015": "^6.24.1", + "babel-preset-react": "^6.24.1", + "clean-webpack-plugin": "^0.1.16", + "css-loader": "^0.28.7", + "dotenv": "^4.0.0", + "extract-text-webpack-plugin": "^3.0.0", + "file-loader": "^0.11.2", + "html-webpack-plugin": "^2.30.1", + "node-sass": "^4.5.3", + "react": "^15.6.1", + "react-dom": "^15.6.1", + "react-redux": "^5.0.6", + "react-router": "^4.2.0", + "react-router-dom": "^4.2.2", + "redux": "^3.7.2", + "sass-loader": "^6.0.6", + "superagent": "^3.6.0", + "uglifyjs-webpack-plugin": "^0.4.6", + "url-loader": "^0.5.9", + "webpack": "^3.5.6", + "webpack-dev-server": "^2.7.1" + } +} diff --git a/frontend/webpack.config.js b/frontend/webpack.config.js new file mode 100644 index 0000000..d741e6c --- /dev/null +++ b/frontend/webpack.config.js @@ -0,0 +1,87 @@ + +'use strict'; + +require('dotenv').config(); +const production = process.env.NODE_ENV === 'production'; + +const {DefinePlugin, EnvironmentPlugin} = require('webpack'); +const HtmlPlugin = require('html-webpack-plugin'); +const CleanPlugin = require('clean-webpack-plugin'); +const UglifyPlugin = require('uglifyjs-webpack-plugin'); +const ExtractPlugin = require('extract-text-webpack-plugin'); + +let plugins = [ + new EnvironmentPlugin(['NODE_ENV']), + new ExtractPlugin('bundle-[hash].css'), + new HtmlPlugin({ template: `${__dirname}/src/index.html` }), + new DefinePlugin({ + __DEBUG__: JSON.stringify(!production), + __API_URL__: JSON.stringify(process.env.API_URL) + }) +] + +if (production) { + plugins = plugins.concat([ new CleanPlugin(), new UglifyPlugin() ]); +} + +module.exports = { + plugins, + entry: `${__dirname}/src/main.js`, + devServer: { + historyApiFallback: true + }, + devtool: production ? undefined : 'eval', + output: { + path: `${__dirname}/build`, + filename: 'bundle-[hash].js', + publicPath: process.env.CDN_URL + }, + module: { + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, + { + test: /\.scss$/, + loader: ExtractPlugin.extract(['css-loader', 'sass-loader']) + }, + { + test: /\.(woff|woff2|ttf|eot|glyph|\.svg)$/, + use: [ + { + loader: 'url-loader', + options: { + limit: 10000, + name: 'font/[name].[ext]' + } + } + ] + }, + { + test: /\.(jpg|jpeg|gif|png|tiff|svg)$/, + exclude: /\.glyph.svg/, + use: [ + { + loader: 'url-loader', + options: { + limit: 6000, + name: 'image/[name].[ext]' + } + } + ] + }, + { + test: /\.(mp3|aac|aiff|wav|flac|m4a|mp4|ogg)$/, + exclude: /\.glyph.svg/, + use: [ + { + loader: 'file-loader', + options: { name: 'audio/[name].[ext]' } + } + ] + } + ] + } +} From 5d5ffa2802dbee19254c029aa7436b688be204de Mon Sep 17 00:00:00 2001 From: Jamesbillard12 Date: Wed, 6 Sep 2017 13:47:38 -0700 Subject: [PATCH 02/10] initial commit pt 2 --- .eslintignore | 5 + .eslintrc | 21 ++ .gitignore | 136 +++++++++++ backend/.coveralls.yml | 2 + backend/.travis.yml | 14 ++ backend/README.md | 55 +++++ backend/lib/basic-auth-middleware.js | 36 +++ backend/lib/bearer-auth-middleware.js | 35 +++ backend/lib/error-middleware.js | 46 ++++ backend/model/beer.js | 17 ++ backend/model/brewery.js | 15 ++ backend/model/user.js | 75 ++++++ backend/package.json | 47 ++++ backend/route/auth-route.js | 40 ++++ backend/route/beer-route.js | 91 +++++++ backend/route/brewery-route.js | 55 +++++ backend/server.js | 31 +++ backend/test/auth-route-test.js | 153 ++++++++++++ backend/test/beer-route-test.js | 173 ++++++++++++++ backend/test/brewery-route-test.js | 331 ++++++++++++++++++++++++++ backend/tester.png | Bin 0 -> 74270 bytes backend/tester0.png | Bin 0 -> 74270 bytes frontend/src/index.html | 0 frontend/src/lib/app-create-store.js | 9 + frontend/src/lib/redux-reporter.js | 15 ++ frontend/src/lib/redux-thunk.js | 4 + frontend/src/lib/util.js | 19 ++ frontend/src/main.js | 0 frontend/src/reducer/auth.js | 0 frontend/src/reducer/index.js | 0 30 files changed, 1425 insertions(+) create mode 100644 .eslintignore create mode 100644 .eslintrc create mode 100644 .gitignore create mode 100644 backend/.coveralls.yml create mode 100644 backend/.travis.yml create mode 100644 backend/README.md create mode 100644 backend/lib/basic-auth-middleware.js create mode 100644 backend/lib/bearer-auth-middleware.js create mode 100644 backend/lib/error-middleware.js create mode 100644 backend/model/beer.js create mode 100644 backend/model/brewery.js create mode 100644 backend/model/user.js create mode 100644 backend/package.json create mode 100644 backend/route/auth-route.js create mode 100644 backend/route/beer-route.js create mode 100644 backend/route/brewery-route.js create mode 100644 backend/server.js create mode 100644 backend/test/auth-route-test.js create mode 100644 backend/test/beer-route-test.js create mode 100644 backend/test/brewery-route-test.js create mode 100644 backend/tester.png create mode 100644 backend/tester0.png create mode 100644 frontend/src/index.html create mode 100644 frontend/src/lib/app-create-store.js create mode 100644 frontend/src/lib/redux-reporter.js create mode 100644 frontend/src/lib/redux-thunk.js create mode 100644 frontend/src/lib/util.js create mode 100644 frontend/src/main.js create mode 100644 frontend/src/reducer/auth.js create mode 100644 frontend/src/reducer/index.js diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..05b1cf3 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +**/node_modules/* +**/vendor/* +**/*.min.js +**/coverage/* +**/build/* diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..8dc6807 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,21 @@ +{ + "rules": { + "no-console": "off", + "indent": [ "error", 2 ], + "quotes": [ "error", "single" ], + "semi": ["error", "always"], + "linebreak-style": [ "error", "unix" ] + }, + "env": { + "es6": true, + "node": true, + "mocha": true, + "jasmine": true + }, + "ecmaFeatures": { + "modules": true, + "experimentalObjectRestSpread": true, + "impliedStrict": true + }, + "extends": "eslint:recommended" +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..345130c --- /dev/null +++ b/.gitignore @@ -0,0 +1,136 @@ +# Created by https://www.gitignore.io/api/osx,vim,node,macos,windows + +### macOS ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + + +### OSX ### + +# Icon must end with two \r + +# Thumbnails + +# Files that might appear in the root of a volume + +# Directories potentially created on remote AFP share + +### Vim ### +# swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-v][a-z] +[._]sw[a-p] +# session +Session.vim +# temporary +.netrwhist +*~ +# auto-generated tag files +tags + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.gitignore.io/api/osx,vim,node,macos,windows diff --git a/backend/.coveralls.yml b/backend/.coveralls.yml new file mode 100644 index 0000000..c66a565 --- /dev/null +++ b/backend/.coveralls.yml @@ -0,0 +1,2 @@ +service_name: travis-ci +repo_token: 73yiaKsBCCnbKdzO3HTrw46Sv6NxnemUE diff --git a/backend/.travis.yml b/backend/.travis.yml new file mode 100644 index 0000000..2c1da3c --- /dev/null +++ b/backend/.travis.yml @@ -0,0 +1,14 @@ +language: node_js +os: + -osx +sudo: false +node_js: + - "node" +services: + - mongodb +install: + - npm install +before_script: + - sleep 15 +script: + - npm test diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..01534c8 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,55 @@ +![CF](https://camo.githubusercontent.com/70edab54bba80edb7493cad3135e9606781cbb6b/687474703a2f2f692e696d6775722e636f6d2f377635415363382e706e67) 18: Image Uploads w/ AWS S3 +=== + +## Submission Instructions + * fork this repository & create a new branch for your work + * write all of your code in a directory named `lab-` + `` **e.g.** `lab-susan` + * push to your repository + * submit a pull request to this repository + * submit a link to your PR in canvas + * write a question and observation on canvas + +## Learning Objectives +* students will be able to upload static assets to AWS S3 +* students will be able to retrieve a cdn url that contains the previously uploaded static asset +* students will be able to work with secret and public access keys + +## Requirements +#### Configuration +* `package.json` +* `.eslintrc` +* `.gitignore` +* `README.md` + +#### Description +* create an AWS account +* create an AWS Access Key and Secret + * add the Access Key and Secret to your `.env` file +* create a new model that represents a file type that you want to store on AWS S3 + * ex: `.mp3`, `.mp4`, `.png`, etc +* create a test that uploads one of these files to your route +* use the `aws-sdk` to assist with uploading +* use `multer` to parse the file upload request + +#### Server Endpoint +* `POST` - `/api/resource/:resourceID/new-resource` + +#### Tests +* `POST` - **200** - test that the upload worked and a resource object is returned + +#### Bonus +* `DELETE` route - `/api/resource/:resourceID/new-resource/:new-resourceID` +* Test: `DELETE` - **204** - test to ensure the object was deleted from s3 + +#### Bonus: 3pts +* try using the `deleteObject` method provided by the `aws-sdk` to delete an object *(file)* from S3 + * you will need to pass in a `params` object that contains the associated Bucket and AWS object key in order to delete the object from s3 + * ex: + ``` javascript + var params = { + Bucket: 's3-bucket-name', + Key: 'object-filename' + } + s3.deleteObject(params) + ``` +* don't forget to remove the resource from the DB diff --git a/backend/lib/basic-auth-middleware.js b/backend/lib/basic-auth-middleware.js new file mode 100644 index 0000000..97f95e6 --- /dev/null +++ b/backend/lib/basic-auth-middleware.js @@ -0,0 +1,36 @@ +'use strict'; + +const createError = require('http-errors'); +const debug = require('debug')('brewery:basic-auth-middleware'); + +module.exports = function(req, res, next) { + debug('basid auth'); + + var authHeader = req.headers.authorization; + if(!authHeader){ + return next(createError(401, 'authorization header required')); + } + + var base64str = authHeader.split('Basic ')[1]; + if(!base64str) { + return next(createError(401, 'username and password required')); + } + + var utf8str = new Buffer(base64str, 'base64').toString(); + var authArr = utf8str.split(':'); + + req.auth = { + username: authArr[0], + password: authArr[1] + }; + + if(!req.auth.username) { + return next(createError(401, 'username required')); + } + + if(!req.auth.password) { + return next(createError(401, 'password required')); + } + + next(); +}; diff --git a/backend/lib/bearer-auth-middleware.js b/backend/lib/bearer-auth-middleware.js new file mode 100644 index 0000000..a8aa9f4 --- /dev/null +++ b/backend/lib/bearer-auth-middleware.js @@ -0,0 +1,35 @@ +'use strict'; + +const jwt = require('jsonwebtoken'); +const createError = require('http-errors'); +const debug = require('debug')('brewery:bearer-auth-middleware'); + +const User = require('../model/user.js'); + +module.exports = function(req, res, next) { + debug('bearer auth'); + + + var authHeader = req.headers.authorization; + if (!authHeader) { + return next(createError(401, 'authorization header required')); + } + + var token = authHeader.split('Bearer ')[1]; + if (!token) { + return next(createError(401, 'token required')); + } + + jwt.verify(token, process.env.APP_SECRET, (err, decoded) => { + if (err) return next(err); + + User.findOne({ findHash: decoded.token }) + .then( user => { + req.user = user; + next(); + }) + .catch( err => { + next(createError(401, err.message)); + }); + }); +}; diff --git a/backend/lib/error-middleware.js b/backend/lib/error-middleware.js new file mode 100644 index 0000000..26a1131 --- /dev/null +++ b/backend/lib/error-middleware.js @@ -0,0 +1,46 @@ +'use strict'; + +const createError = require('http-errors'); +const debug = require('debug')('brewery:error-middleware'); + +module.exports = function(err, req, res, next) { + debug('error-middleware'); + console.error('name: ', err.name); + console.error('msg: ', err.message); + + + if(err.name === 'CastError'){ + err = createError(404, err.message); + res.status(err.status).send(err.message); + next(); + return; + } + + if(err.name === 'ValidationError'){ + err = createError(400, err.message); + res.status(err.status).send(err.message); + next(); + return; + } + + if(err.name === 'Error'){ + err = createError(400, err.message); + res.status(err.status).send(err.message); + next(); + return; + } + + if(err.status) { + debug('user error'); + + res.status(err.status).send(err.name); + next(); + + return; + } + + debug('server error'); + err = createError(500, err.message); + res.status(err.status).send(err.name); + next(); +}; diff --git a/backend/model/beer.js b/backend/model/beer.js new file mode 100644 index 0000000..e967dc7 --- /dev/null +++ b/backend/model/beer.js @@ -0,0 +1,17 @@ +'use strict'; + +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const beerSchema = Schema ({ + name: {type: String, required: true}, + style: {type: String, require: true}, + ibu: {type: String, required: true}, + userID: {type: Schema.Types.ObjectId, require: true}, + breweryID: {type: Schema.Types.ObjectId, required: true }, + imageURI: {type: String, required: true, unique: true}, + objectKey: {type: String, required: true, unique: true}, + created: {type: Date, default: Date.now} +}); + +module.exports = mongoose.model('beer', beerSchema); diff --git a/backend/model/brewery.js b/backend/model/brewery.js new file mode 100644 index 0000000..fd79192 --- /dev/null +++ b/backend/model/brewery.js @@ -0,0 +1,15 @@ +'use strict'; + +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const brewerySchema = Schema({ + name: {type: String, required: true}, + address: {type: String, required: true}, + phoneNumber: {type: String, required: true}, + timestamp: {type: Date, required: true}, + userID: {type: Schema.Types.ObjectId, required: true}, + beers: [{type: Schema.Types.ObjectId, ref: 'beer'}] +}); + +module.exports = mongoose.model('brewery', brewerySchema); diff --git a/backend/model/user.js b/backend/model/user.js new file mode 100644 index 0000000..a7feb03 --- /dev/null +++ b/backend/model/user.js @@ -0,0 +1,75 @@ +'use strict'; + +const crypto = require('crypto'); +const bcrypt = require('bcrypt'); +const jwt = require('jsonwebtoken'); +const mongoose = require('mongoose'); +const createError = require('http-errors'); +const Promise = require('bluebird'); +const debug = require('debug')('brewery:user'); + +const Schema = mongoose.Schema; + +const userSchema = Schema({ + username: {type: String, required: true, unique: true}, + email: {type: String, required: true, unique: true}, + password: {type: String, required: true}, + findHash: {type: String, unique: true} +}); + +userSchema.methods.generatePasswordHash = function(password) { + debug('generatePasswordHash'); + + return new Promise((resolve, reject) => { + bcrypt.hash(password, 10, (err, hash) => { + if(err) return reject(err); + this.password = hash; + resolve(this); + }); + }); +}; + +userSchema.methods.comparePasswordHash = function(password) { + debug('comparePasswordHash'); + + return new Promise((resolve, reject) => { + bcrypt.compare(password, this.password, (err, valid) => { + if(err) return reject(err); + if(!valid) return reject(createError(401, 'invalid password')); + resolve(this); + }); + }); +}; + +userSchema.methods.generateFindHash = function() { + debug('generateFindHash'); + + return new Promise((resolve, reject) => { + let tries = 0; + + _generateFindHash.call(this); + + function _generateFindHash() { + this.findHash = crypto.randomBytes(32).toString('hex'); + this.save() + .then( () => resolve(this.findHash)) + .catch( err => { + if(tries > 3) return reject(err); + tries++; + _generateFindHash.call(this); + }); + } + }); +}; + +userSchema.methods.generateToken = function() { + debug('generateToken'); + + return new Promise((resolve, reject) => { + this.generateFindHash() + .then( findHash => resolve(jwt.sign({token: findHash}, process.env.APP_SECRET))) + .catch(err => reject(err)); + }); +}; + +module.exports = mongoose.model('user', userSchema); diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..940fde8 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,47 @@ +{ + "name": "18-aws-s3", + "version": "1.0.0", + "description": "![CF](https://camo.githubusercontent.com/70edab54bba80edb7493cad3135e9606781cbb6b/687474703a2f2f692e696d6775722e636f6d2f377635415363382e706e67) 18: Image Uploads w/ AWS S3 ===", + "main": "server.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "DEBUG='brewery*' istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage", + "start": "DEBUG='brewery*' node server.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Jamesbillard12/18-aws-s3.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/Jamesbillard12/18-aws-s3/issues" + }, + "homepage": "https://github.com/Jamesbillard12/18-aws-s3#readme", + "dependencies": { + "aws-sdk": "^2.95.0", + "bcrypt": "^1.0.2", + "bluebird": "^3.5.0", + "body-parser": "^1.17.2", + "cors": "^2.8.4", + "debug": "^3.0.0", + "del": "^3.0.0", + "dotenv": "^4.0.0", + "express": "^4.15.4", + "http-errors": "^1.6.2", + "jsonwebtoken": "^7.4.2", + "mongoose": "^4.11.6", + "morgan": "^1.8.2", + "multer": "^1.3.0" + }, + "devDependencies": { + "chai": "^4.1.1", + "coveralls": "^2.13.1", + "istanbul": "^0.4.5", + "mocha": "^3.5.0", + "superagent": "^3.5.2" + } +} diff --git a/backend/route/auth-route.js b/backend/route/auth-route.js new file mode 100644 index 0000000..3520ec1 --- /dev/null +++ b/backend/route/auth-route.js @@ -0,0 +1,40 @@ +'use strict'; + +const jsonParser = require('body-parser').json(); +const debug = require('debug')('brewery:auth-route'); +const Router = require('express').Router; +const createError = require('http-errors'); +const basicAuth = require('../lib/basic-auth-middleware.js'); +const User = require('../model/user.js'); + +const authRouter = module.exports = Router(); + +authRouter.post('/api/signup', jsonParser, function (req, res, next) { + debug('POST: /api/signup'); + + let password = req.body.password; + delete req.body.password; + + let user = new User(req.body); + + user.generatePasswordHash(password) + .then( user => user.save()) + .then( user => user.generateToken()) + .then( token => res.send(token)) + .catch(next); +}); + +authRouter.get('/api/signin', basicAuth, function(req, res, next){ + debug('GET: /api/signin'); + + User.findOne({username: req.auth.username}) + .then( user => { + if(!user) { + return Promise.reject(createError(401, 'invalid username')); + } + return user.comparePasswordHash(req.auth.password); + }) + .then( user => user.generateToken()) + .then( token => res.send(token)) + .catch(next); +}); diff --git a/backend/route/beer-route.js b/backend/route/beer-route.js new file mode 100644 index 0000000..8bd2d4e --- /dev/null +++ b/backend/route/beer-route.js @@ -0,0 +1,91 @@ +'use strict'; + +const fs = require('fs'); +const path = require('path'); +const del = require('del'); +const AWS = require('aws-sdk'); +const multer = require('multer'); +const Router = require('express').Router; +const createError = require('http-errors'); +const debug = require('debug')('brewery:beer-route'); + +const Beer = require('../model/beer.js'); +const Brewery = require('../model/brewery.js'); +const bearerAuth = require('../lib/bearer-auth-middleware.js'); + +AWS.config.setPromisesDependency(require('bluebird')); + +const s3 = new AWS.S3(); +const datadir = `${__dirname}/../data`; +const upload = multer({ dest: datadir }); + +const beerRouter = module.exports = Router(); + +function s3uploadProm(params) { + return new Promise((resolve, reject) => { + s3.upload(params, (err, s3data) => { + resolve(s3data); + }); + }); +} + +beerRouter.post('/api/brewery/:breweryID/beer', bearerAuth, upload.single('image'), function(req, res, next){ + debug('POST: /api/brewery/:breweryID/beer'); + + if(!req.file){ + return next(createError(400, 'file not found')); + } + + if(!req.file.path){ + return next(createError(400, 'file not saved')); + } + + let ext = path.extname(req.file.originalname); + + let params = { + ACL: 'public-read', + Bucket: process.env.AWS_BUCKET, + Key: `${req.file.filename}${ext}`, + Body: fs.createReadStream(req.file.path), + }; + + Brewery.findById(req.params.breweryID) + .then( () => s3uploadProm(params)) + .then( s3data => { + console.log('s3data', s3data); + del([`${datadir}/*`]); + let beerData = { + name: req.body.name, + style: req.body.style, + ibu: req.body.ibu, + objectKey: s3data.key, + imageURI: s3data.Location, + userID: req.user._id, + breweryID: req.params.breweryID, + }; + return new Beer(beerData).save(); + }) + .then( beer =>res.json(beer)) + .catch( err => next(err)); +}); + +beerRouter.delete('/api/brewery/:breweryID/beer/:beerID', bearerAuth, function(req, res, next){ + debug('DELETE: /api/brewery/:id'); + + + Beer.findById(req.params.beerID) + .then( beer => { + let params = { + Bucket: process.env.AWS_BUCKET, + Key: beer.objectKey + }; + s3.deleteObject(params, function(err, data) { + if(err)console.log(err); + else console.log(data); + Beer.findByIdAndRemove(req.params.id) + .then( () => res.status(204).send()) + .catch(next); + }); + }) + .catch(next); +}); diff --git a/backend/route/brewery-route.js b/backend/route/brewery-route.js new file mode 100644 index 0000000..891be39 --- /dev/null +++ b/backend/route/brewery-route.js @@ -0,0 +1,55 @@ +'use strict'; + +const Router = require('express').Router; +const jsonParser = require('body-parser').json(); +const debug = require('debug')('brewery:brewery-route'); + +const Brewery = require('../model/brewery.js'); +const bearerAuth = require('../lib/bearer-auth-middleware'); + +const breweryRouter = module.exports = new Router(); + +breweryRouter.post('/api/brewery', bearerAuth, jsonParser, function(req, res, next){ + debug('POST: /api/brewery'); + + req.body.timestamp = new Date(); + req.body.userID = req.user._id; + new Brewery(req.body).save() + .then( brewery => res.json(brewery)) + .catch(next); +}); + +breweryRouter.get('/api/brewery/:id', bearerAuth, function(req, res, next){ + debug('GET: /api/brewery'); + + Brewery.findById(req.params.id) + .populate('beers') + .then( brewery => res.json(brewery)) + .catch(next); +}); + +breweryRouter.put('/api/brewery/:id', bearerAuth, jsonParser, function(req, res, next){ + debug('PUT: /api/brewery/:id'); + + if(Object.keys(req.body).length === 0) { + Brewery.findById(req.params.id) + .then(brewery => { + res.status(400); + res.json(brewery); + }) + .catch(next); + return; + } + + Brewery.findByIdAndUpdate(req.params.id, req.body, {new: true}) + .then(brewery => res.json(brewery)) + .catch(next); +}); + +breweryRouter.delete('/api/brewery/:id', bearerAuth, function(req, res, next){ + debug('DELETE: /api/brewery/:id'); + + Brewery.findByIdAndRemove(req.params.id) + .then( () => res.status(204).send()) + .catch(next); +}); diff --git a/backend/server.js b/backend/server.js new file mode 100644 index 0000000..e10744a --- /dev/null +++ b/backend/server.js @@ -0,0 +1,31 @@ +'use strict'; + +const express = require('express'); +const debug = require('debug')('brewery:server'); +const dotenv = require('dotenv'); +const mongoose = require('mongoose'); +const morgan = require('morgan'); +const cors = require('cors'); + +const authRouter = require('./route/auth-route.js'); +const breweryRouter = require('./route/brewery-route.js'); +const beerRouter = require('./route/beer-route.js'); +const errors = require('./lib/error-middleware.js'); + +dotenv.load(); + +const app = express(); +const PORT = process.env.PORT || 3000; +mongoose.connect(process.env.MONGODB_URI); + +app.use(cors()); +app.use(morgan('dev')); + +app.use(authRouter); +app.use(breweryRouter); +app.use(beerRouter); +app.use(errors); + +app.listen(PORT, () => { + debug(`server on ${PORT}`); +}); diff --git a/backend/test/auth-route-test.js b/backend/test/auth-route-test.js new file mode 100644 index 0000000..603baf4 --- /dev/null +++ b/backend/test/auth-route-test.js @@ -0,0 +1,153 @@ +'use strict'; + +const expect = require('chai').expect; +const request = require('superagent'); +const User = require('../model/user.js'); + + + +const url = `http://localhost:${process.env.PORT}`; + +const exampleUser = { + username: 'exampleuser', + password: '1234', + email: 'exampleuser@test.com' +}; + +describe('Auth Routes', function() { + describe('POST: /api/signup', function() { + describe('with a valid body', function() { + after( done => { + User.remove({}) + .then(() => { + }) + .then( () => done()) + .catch(done); + }); + + it('should return a token', done => { + request.post(`${url}/api/signup`) + .send(exampleUser) + .end((err, res) => { + if (err) return done(err); + expect(res.status).to.equal(200); + expect(res.text).to.be.a('string'); + done(); + }); + }); + }); + }); + describe('POST: /api/signup', function() { + describe('with an invalid body', function() { + after( done => { + User.remove({}) + .then( () => done()) + .catch(done); + }); + + it('should return status 400', done => { + request.post(`${url}/api/signup`) + .send() + .end((err, res) => { + expect(res.status).to.equal(400); + done(); + }); + }); + }); + }); + + describe('GET: /api/signin', function() { + describe('with a valid body', function() { + before( done => { + let user = new User(exampleUser); + user.generatePasswordHash(exampleUser.password) + .then( user => user.save()) + .then( user => { + this.tempUser = user; + done(); + }); + }); + + after( done => { + User.remove({}) + .then( () => done()) + .catch(done); + }); + + it('should return a token 200', done => { + request.get(`${url}/api/signin`) + .auth('exampleuser', '1234') + .end((err, res) => { + expect(res.status).to.equal(200); + done(); + }); + }); + }); + }); + + describe('GET: /api/sign', function() { + describe('with a valid body but invalid path', function() { + it('should return status 404', done => { + request.get(`${url}/api/sign`) + .auth('exampleuser', '1234') + .end((err, res) => { + expect(res.status).to.equal(404); + done(); + }); + }); + }); + }); + + // Problem area + describe('cannot be authenticated', function() { + beforeEach( done => { + let user = new User(exampleUser); + + user.generatePasswordHash(exampleUser.password) + .then( user => user.save()) + .then( user => { + this.tempUser = user; + done(); + }) + .catch(done); + }); + + afterEach( done => { + User.remove({}) + .then( () => done()) + .catch(done); + }); + it('should return status 401 with no username', done => { + request.get(`${url}/api/signin`) + .auth('', '1234') + .end((err, res) => { + expect(res.status).to.equal(401); + done(); + }); + }); + it('should return status 401 with no password', done => { + request.get(`${url}/api/signin`) + .auth('exampleuser', '') + .end((err, res) => { + expect(res.status).to.equal(401); + done(); + }); + }); + it('msg should return invalid password', done => { + request.get(`${url}/api/signin`) + .auth('exampleuser', 'ABCDE') + .end((err, res) => { + expect(res.status).equal(401); + done(); + }); + }); + it('msg should return invalid username', done => { + request.get(`${url}/api/signin`) + .auth('dog', '1234') + .end((err, res) => { + expect(res.status).equal(401); + done(); + }); + }); + }); +}); diff --git a/backend/test/beer-route-test.js b/backend/test/beer-route-test.js new file mode 100644 index 0000000..a0203f8 --- /dev/null +++ b/backend/test/beer-route-test.js @@ -0,0 +1,173 @@ +'use strict'; + +const expect = require('chai').expect; +const request = require('superagent'); + +const Beer = require('../model/beer.js'); +const User = require('../model/user.js'); +const Brewery = require('../model/brewery.js'); + +require('../server.js'); + +const url = `http://localhost:${process.env.PORT}`; + +const exampleUser = { + username: 'exampleuser', + password: '1234', + email: 'exampleuser@test.com' +}; + +const exampleBrewery = { + name: 'the brewery name', + address: 'the address', + phoneNumber: '555-555-5555', + timestamp: new Date() +}; + +const exampleBeer = { + name: 'test beer', + style: 'test style', + ibu: '45', + image: `${__dirname}/../tester.png` +}; + +const exampleBeer0 = { + name: 'test beer', + style: 'test style', + ibu: '45', + image: `${__dirname}/../tester0.png` +}; + +describe('beer routes', function() { + afterEach( done => { + Promise.all([ + Beer.remove({}), + Brewery.remove({}), + User.remove({}), + ]) + .then( () => done()) + .catch(done); + }); + + describe('POST: /api/brewery/:breweryID/beer', function() { + describe('with a valid token and valid data', function() { + before( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => user.save()) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + + before( done => { + exampleBrewery.userID = this.tempUser._id.toString(); + new Brewery(exampleBrewery).save() + .then( brewery => { + this.tempBrewery = brewery; + done(); + }) + .catch(done); + }); + + after( done => { + delete exampleBrewery.userID; + done(); + }); + + it('should return a beer', done => { + request.post(`${url}/api/brewery/${this.tempBrewery._id}/beer`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .field('name', exampleBeer.name) + .field('style', exampleBeer.style) + .field('ibu', exampleBeer.ibu) + .attach('image', exampleBeer.image) + .end((err, res) => { + if(err) return done(err); + expect(res.status).to.equal(200); + expect(res.body.name).to.equal(exampleBeer.name); + expect(res.body.style).to.equal(exampleBeer.style); + expect(res.body.ibu).to.equal(exampleBeer.ibu); + expect(res.body.breweryID).to.equal(this.tempBrewery._id.toString()); + done(); + }); + }); + }); + }); +}); + +describe('DELETE: /api/brewery/:breweryID/beer/:beerID', function() { + afterEach( done => { + Promise.all([ + Beer.remove({}), + Brewery.remove({}), + User.remove({}), + ]) + .then( () => done()) + .catch(done); + }); + describe('with a valid token and valid data and ID', function() { + before( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => user.save()) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + + before( done => { + exampleBrewery.userID = this.tempUser._id.toString(); + new Brewery(exampleBrewery).save() + .then( brewery => { + this.tempBrewery = brewery; + done(); + }) + .catch(done); + }); + + after( done => { + delete exampleBrewery.userID; + done(); + }); + + it('should delete a beer', done => { + request.post(`${url}/api/brewery/${this.tempBrewery._id}/beer`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .field('name', exampleBeer0.name) + .field('style', exampleBeer0.style) + .field('ibu', exampleBeer0.ibu) + .attach('image', exampleBeer0.image) + .then((res) => { + this.tempBeer = res.body; + return this.tempBeer; + }, done) + .then((beer) => { + request.delete(`${url}/api/brewery/${this.tempBrewery._id}/beer/${beer._id}`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .then((res) => { + expect(res.status).to.equal(204); + done(); + }, done); + }); + }); + }); +}); diff --git a/backend/test/brewery-route-test.js b/backend/test/brewery-route-test.js new file mode 100644 index 0000000..e872396 --- /dev/null +++ b/backend/test/brewery-route-test.js @@ -0,0 +1,331 @@ +'use strict'; +const expect = require('chai').expect; +const request = require('superagent'); +const Promise = require('bluebird'); + +const User = require('../model/user.js'); +const Brewery = require('../model/brewery.js'); +const Beer = require('../model/beer.js'); + +const url = `http://localhost:${process.env.PORT}`; + +const exampleUser = { + username: 'exampleuser', + password: '1234', + email: 'exampleuser@test.com' +}; + +let tempBrewery; + +const exampleBrewery = { + name: 'the brewery name', + address: 'the address', + phoneNumber: '555-555-5555', + timestamp: new Date() +}; + +const exampleBeer = { + name: 'test beer', + style: 'test style', + ibu: '45' +}; + +const newBrewery = { + name: 'new test brewery name', + address: 'new test address', + phoneNumber: '777-777-7777', +}; + +describe('Brewery Routes', function() { + afterEach( done => { + Promise.all([ + User.remove({}), + Brewery.remove({}), + Beer.remove({}) + ]) + .then( () => done()) + .catch(done); + }); + + describe('POST: /api/brewery', function() { + describe('POST with a valid req body',() => { + before( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => { + return user.save(); + }) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + it('should return a brewery 200', done => { + request.post(`${url}/api/brewery`) + .send(exampleBrewery) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .end((err,res) => { + if(err) return done(err); + expect(res.status).to.equal(200); + expect(res.body.name).to.equal('the brewery name'); + expect(res.body.address).to.equal('the address'); + expect(res.body.phoneNumber).to.equal('555-555-5555'); + done(); + }); + }); + }); + describe('POST with an invalid request', () => { + before( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => { + return user.save(); + }) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + it('should return 400', done => { + request.post(`${url}/api/brewery`) + .send() + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .end((err,res) => { + expect(res.status).to.equal(400); + done(); + }); + }); + }); + describe('POST without a token 401', () => { + before( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => { + return user.save(); + }) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + it('should return 401', done => { + request.post(`${url}/api/brewery`) + .send() + .end((err,res) => { + expect(res.status).to.equal(401); + done(); + }); + }); + }); + }); + + describe('GET: /api/brewery/:id', () => { + before( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => { + return user.save(); + }) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + + before( done => { + exampleBrewery.userID = this.tempUser._id.toString(); + new Brewery(exampleBrewery).save() + .then( brewery => { + this.tempBrewery = brewery; + done(); + }) + .catch(done); + }); + + it('GET should return a brewery 200', done => { + request.get(`${url}/api/brewery/${this.tempBrewery._id}`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .end( (err, res) => { + if(err) return done(err); + expect(res.status).to.equal(200); + expect(res.body.name).to.equal('the brewery name'); + expect(res.body.address).to.equal('the address'); + expect(res.body.phoneNumber).to.equal('555-555-5555'); + done(); + }); + }); + describe('GET with an invalid request 404', () => { + it('should return 404', done => { + request.get(`${url}/api/brewery/1231231231241413212`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .end( (err, res) => { + expect(res.status).to.equal(404); + done(); + }); + }); + describe('GET with no token should be 401', () => { + it('should return 401', done => { + request.get(`${url}/api/brewery/1231231231241413212`) + .end( (err, res) => { + expect(res.status).to.equal(401); + done(); + }); + }); + }); + + describe('testing PUT /api/brewery/:id', () => { + beforeEach( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => { + return user.save(); + }) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + + beforeEach( done => { + exampleBrewery.userID = this.tempUser._id.toString(); + new Brewery(exampleBrewery).save() + .then( brewery => { + this.tempBrewery = brewery; + done(); + }) + .catch(done); + }); + + it('PUT should respond with a 200 status code and an updated brewery object.', () => { + return request.put(`${url}/api/brewery/${this.tempBrewery._id}`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .send(newBrewery) + .then(res => { + expect(res.status).to.equal(200); + expect(res.body.name).to.equal('new test brewery name'); + expect(res.body.address).to.equal('new test address'); + expect(res.body.phoneNumber).to.equal('777-777-7777'); + tempBrewery = res.body; + }); + }); + it('PUT should respond with a 400 error code.', () => { + return request.post(`${url}/api/brewery`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .send(tempBrewery) + .then((res) => { + tempBrewery = res.body; + return request.put(`${url}/api/brewery/${this.tempBrewery._id}`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .send(null); + }) + .catch(err => { + expect(err.status).to.equal(400); + }); + }); + it('PUT should respond with a 404 error code if an ID is not found.', () => { + return request.put(`${url}/api/brewery/12345`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .catch(err => { + expect(err.status).to.equal(404); + }); + }); + it('PUT should respond with a 401 if no token was sent', () => { + return request.put(`${url}/api/brewery/12345`) + .catch(err => { + expect(err.status).to.equal(401); + }); + }); + }); + }); + }); +}); + +describe('DELETE: /api/brewery/:id', () => { + before( done => { + new User(exampleUser) + .generatePasswordHash(exampleUser.password) + .then( user => { + return user.save(); + }) + .then( user => { + this.tempUser = user; + return user.generateToken(); + }) + .then( token => { + this.tempToken = token; + done(); + }) + .catch(done); + }); + + before( done => { + exampleBrewery.userID = this.tempUser._id.toString(); + new Brewery(exampleBrewery).save() + .then( brewery => { + this.tempBrewery = brewery; + done(); + }) + .catch(done); + }); + + after( done => { + Promise.all([ + User.remove({}), + ]) + .then( () => done()) + .catch(done); + }); + + it('DELETE should delete a brewery 204', done => { + request.delete(`${url}/api/brewery/${this.tempBrewery._id}`) + .set({ + Authorization: `Bearer ${this.tempToken}` + }) + .end( (err, res) => { + if(err) return done(err); + expect(res.status).to.equal(204); + done(); + }); + }); +}); diff --git a/backend/tester.png b/backend/tester.png new file mode 100644 index 0000000000000000000000000000000000000000..11482dcf4087f429a9598816f3023ca49a890c3f GIT binary patch literal 74270 zcmYJac|6qL7eD@*F(U@q#*!>UgF%**2r(lU(1?(my{(L z`@UyS*1`Pd{rUdBzu&*}c)af8-gD1A=eeAT)X`FQ`Q3jkS738AgCzG zzbKrqPXQp_Wp!oDBR|mQZx9`Tprxq5?7F=e-5ZQr>wN}Hol&EgfY+SBTZ-K;3{_l* zW!&9wieVw+@=IS))bBNP1|RC+p76d7(&e021(~wJS<~O*jfcLXm6CDFZoDwxZ+W4j zk#f$|NVivw(5`0BOtjLX>!q-7F=>w}IR+q93xU2Xjy>1xIR9m+&jn5l98I;{wCfE# z>YHz_b(p9*PYwH?|H@4A{`0@^UV8=^K^GCPH|HT#B(bxrW~-cwE#Z4{DBAG%XY^nm z0d`uxZmna!@mrdD$;%qQfCh>+(W@na#mt>cKe35M5!gz68 zb9feXe3Leu9+XiZLQ8g} zeE9KH?YB3p8dKaY&EQP?{hTh_z2cL=3nyTw)mnmA`b@F)j&#HG)qY=kdivQP`)B*` zh1NWk2(eD<5We4k;-v_8mhBX-!gl2G(?Y3nPWd~Cm<8i5g{A!&UiB}Ek$BSI_E$8D zAe~lgzh6ohhm&p{)_zLWJ6*9?rGu}FofW%GXS+JZXb9>^D==Cu-*Xo}6TbMfAZQ)g z>2QTol4hNIN?U|VwdSH{h6fQMVq&?3@!f*AkY-@*9 zQY36NDm?e6Ie%@A;n{GL@t-wBmGJK^<72Klq@#>9CIJawjPD8HS&(^?Z>zAiakD)* zcKMvbthY^mYMAQ1_HOUSXgTRo=NS!C2t8#7b9)R4MHjBA^z7SgqtDjFKo1}LQko(& zDF3oPT&NCyf{IbP!Rq1NZFM-tL#}60N3ym`UMH1sHs6 z_s8z$Oj4yH%UaK?4K5jaROEpLktybaOK8O;IZ%}<$76VE!rC+EEzYMD73F}#(iq@X zh2!6L+It-$9}3dT4>uJG!m+)|IU0V@0H z2g>Hf$X1>lm$6Ky0h{7SYo>Tt$mj@ef?M8H2p0g}lFnY+E!|M6C z@3=MGxz8I=s44dNe6*TfyOxQ6$)48GJn zf1?K9S@^f!pN#c(IH$4Ey&Gqb<1AS=tHcHbO7?YjUwB$1*am+XSfAH_X`Rs&9gr&C zA906oAlkB3aCV5Pv#Gqa#bfL%_iEQhX)`%u--Yof$FD9S6TPYk7khb6E!k|DZ*kNTJ`Os5vI|x*Uwadk1DiXZ zyp)zlG0%Ycd^a=BHR2X8!ISFk6KXkBpVGp^%vX+H5)3!Gsta|ZQcuG!-6Jh2+p2u( zZggr_=-2gQxgPuP5}Nt&$v)(L-R_qHrJv^M_1x5&W*sMUXAvEF+_U-)Tjx@|w=p>$ z-HHUNm!V3@k>3=Gt)7gC_!UUSjbfVwrX(@$UpRZ?QczI|xiP^!W-J!H-hS?vloR|- z0w6uIw*@1nK6g&l$ji{4G!>lw-36w~_;v<&crV+hr${`od!!=92{B!3VxD(B9gU~X z^bpiBqN~YG&Wv=d?dcKzlOUHTx5|rn5#>HuFt*WFL(NWmvp&BpFGM8Xm{o+(F4atY^^o34fDU{FVzh!mC;lYcZ2~vux2( z0~Rr+ige!(ympwB`7QQgv7K)wBOLN`zj}t-57xB)%QRwoECN6X`NrVnT1_#viq>QJ(8Nn2*N7 z{1A40J~u|*EB;_sPF??STj|HgjGXp8)uZV(pKI%Ucdd<2sqVmJ*K26_KRgb&EIk(7 zY^I-r+L!;Kzs}6K=v>D(^N8+mQS06`PJar1IchP7Kj8~bo4J+$dgb8T;p)o9&L(kc zd!~@q4>l4%j^m!kO0cgf)ZTUKP*QErDipQ>jTZUQAO#w8IPd@I_GZ^g<>&rsoo2TZ zWt!+1Q7=bqdbZIvMEBy3JapA5EAFmvX80G)1c9ao!Yu!M;M(Z**l#xnL|OR`pWjVX z>P3p5-fL~xE&J7N{rkK5bmBLA*_Eu%4RXPUmF=saLFB9PmUP0kp^w&ogY=z+g5k1J zna}ygB?&Ph8~tlXPj62MHf?b2>0B$Ekbr3ma?3GDsRZg7uGeWo;mo^I<{J4^Jg7JR zW!`6Kr4=@{Pnz!_vTJvdUsWycJaWm`V0^AAcwSGdk^VznwVUJCrktvROUt!U>z2Ur zU0qNMaX#W#W8;}%0Ex}XByH}wmDB{9&&R|PR zyobVOU;0Ik?Io_|lis2;5(?b5e=AC7!caQv2q zJ(Y^Uh|?0)`Pi9OEoPqv!RgWd-p_lS1hjS{I)|S%wOle4O}r2EX5;I3@^Ic3rG44y zWjg~}^z?*-B`?|Y*>`7FO=wls@^><_r>XoWM{e&2p1Id$41_HDPd5*0i2?_= zq7a}%YDh&&GBjW3;p2E6UFU;4X>cqU4?|F)X`;YXsincY7l9WClPfkM=iT$}o2tRb ztAvIgUs7(3tW&l&@DM%pW#N`FDCoWkKt%dcQSaRwuoJfR`v9Opoeqf-YT<~C2rZ(| z-tqCVRkMc-C-E)M#aFM|GDXty_MR_Z1;mFv9x9DQYFo0I_ptz1DG_z_A~38%mYjgZ z`3;r3an?WiusE=eEDd)HDWWzcHSl~SmKYSLx6|yMWj- z*l}@cj6-5b9gvISnvDDCXF^vwVj{qxO``+|XWZA-(WU|0W|v-FJzAY@G@l7MAO~8{ zvT2MQXyQ>w&SahdzF-xTq1BmNm)!JON-VZ%vj~wf>M3+^i^=e#VY0GWJct5-?u|p$ zks?4g7>o0nD4#6eI60Me zaNkrof=ywcG%7_ciT=7nK#IO@uxnWliF|GN^czs%I^ENS6nZ_g?5 zbQAV4hMq5jZQ#SBr!ED0U@Dvx5@PM@rH@50Ku`?I5CA-tzCArXtB;nC)q}6@pIDu) z)HWYD{I{?95e@Qc=0_WDJH&&0GZb{;>8(}(d2%ho&_D;y0F3CtL6CUCLl+p~I#x{y z0HYZI2$*SmhX<*f%K%WAnx;);PWMUPS=ga7O!B^g)|z3P^eS_ylj4MO_^K|0{<0BA^3Y@A8($RLxDl)|Za4ZX`q%JzGkhtRCG*i`&`-^-pS-+zkF$Z#sujMl!)$%z{$PTn`!>i&qnD^jq^XpK&V zVla%l3x!zX6fXG@*^SgGXNgoDw3L{+Tj#9 z>Kn;jAFwq)3R6W(!xQhESFx?FtsQ)P^G3n4Hw31{#B@ahDNywq}>~*ott#aT0w8dOiOgvVP~#<({`Vo~eowZA+(&z=l#o9^KREiy|h? z>Gkv5ywZ~kClW8!Mt(#?L~b*fWWRGw8-G?T@UF(yytded^)aL>?Qyl3;8&Am%~cq# zLE3kx@xPAg7E;H_6;#5_GkYE~8@%O2dbiUOa3n6;#}|3kOqy6TUQ^tEDuKblZEO(( z;_|{&vJ!4Lsy zOS+6SA9Ac=_3*4CMAKGj@cXcp zCRThwKl5TSU(x@9@1mWpdF@i>-;jE)W~OBE;Gz7N;w#aI+9zJY!W$_;FV0`wb6pME z>rg`n{fT}TC{*jA;7xqd)O_wX*Dv?829ui>v8zc`!+?Wi^-c^6Ysn>Eeicrup0#1ID5hBr>r@*;oWc#*QJo zw0tSVOo)jC_c(q;DtfxTo+I+}{l9JX-#xE|$0J^6+gt3kqT%Sy`s-nnAC6mm7jwBT zm%CjeZ+x6^(ZjUj%8Cc;goPekLxxOr(3FGf!7>+g0bduM(u5^jzXI&&z$k>UZ9F&@ zQp9I_N7U0|Yf=D(6J~WXOyF_%`uDdf!B0Kn-tjGJFv6GtDPIbFLr?(^!6-iP8ne5o znL0zNA+4h>red*3UOZ;^%nIB|pavH_6O2TXcCLzVx%(w`YRGaTGnI6KO;qcwW6^88z>`qs0tt5Z+QwzvyDFIN?%wI;@jU+37Ug@}rd!rVvq@e+} zF0eHM!}m(;_(%h~J<7pe|DeVrtchF_@f9hdQVUHVDHAaG_;;TOmv^;O(PFbO6*qRh8rwu)Ma`wIQ+w5wLDk zzQF)|Y){}gogYQh-1z;`+<}GRAzW0%$GL!BmLHptsLseh%b3A>AJCypJp_k_t7Af< z{GUd2i2SkVx*QCXPpcC&CEp;mqe;hPQiBADy7Q^KqU{wV9EyZvfI*kxWCTjb%Qkrs zVA8${L?X%X#$dy{PeYE=vbwRLBQz5X24^t<;DU+1P7dop2KeuD4!0dcdTPh<2O1A_ z(eVsfih(nxE+@ORcqoH176HM~F{<3q117|uHC1)YClR7$IakiIZ6$z8`Emw6%Gb6c ztFZ+w=K=~Q)ct06UDLQ8xU&(GN=mR`Qw}DS8W#CF-#eMW!Gy(z0tn#Mv%-sqTycwg zf8&h2<=^!5DLf(ONBzLPodTlrldS2E3ZWHcYK;xQ8%m=h8nFA8R{_dyJm3f_ZDK|$ zV-4GfaR3TX`Gzfop#jI$%%;6xmm`eCFVZ+KpRMBoSnIyo{yj4@^*WjgYXgQKy$u?o zkwktR0G1p4vH*82p{C+i(qmFF8`O$tTrh!Fs(qA1$(OIpC_exHACf820kBTy&5okR zvh*>@!RG53i-+{Csf+STk3po`k!kV16UmyOUJ&sp*e#GaIeT#hg=H7Q0s^d? z?}V@%^QJW#7@f^7$Q*pmG%BCvfycO-0$NGXF6_Py6C8G<4?9?DYbv>k1rVuQndePA zfvfp@nKH8eZI-ha*>`09d+n24C-txi=*?0P7V3n;@v|VkO><(KoJ+$@x`9M44XXaD z)H;CkWYtFj>eoeM50v#fhojJbrjl4bT^8lfjTBIyTCh_~1-`w03)?p0E3>Dg7oipv03ll~qog3B_$hJu5=Wu$;e3%bfaJncD8xFJ z&(AVw@Ztv{c)gokuPmFE<|6J*W;UJZ?KVQNAe(yOtUm7>VFfhCn-?gvAq=W8EpkgYD0^`#abIwglJLc;u_jdiOE{Y6765jAAmnHxe?T;P<7kRDr)RD_*^LW(R4$QOlh=1W~?p%e+|?IQ(l2j^vtccw|-) zGv>h3HcS9^D@uIQt`|EMI=;mgA#`H+=3Y=!d`UHNnH1nAZ&-4H?Qi|e-$4j(R+C%Jna8)&b55;Q!o^Pz&!ZyJx*!+z7A~!7a`3deqP#p+} zT2u#GVXM&!{Qg&!t=5M#oXp&BCpWlf8}5D>MPCY-y_@c}>)29cYxNIsC;*b5>iSSu zLn+$};Q5U^yb0Cbx*>kk>E%WcB$@#($^_l(8A%2pXhDNXLS~DHOyj4~Nkj3GA>GML zw{-}DuLx?&1m{J)M%m++ajxEmqW6E8tfqs*7EGgZp`t0J$pJW4YAl}WH6ja&10w(x zJdizMGkX-$M&s-C@7b(xL`U>j%aFFp`zRkYPOl^qs)22i-_fhl(;?HI{N0L9q0e@F zpdv(_z7rKNAsH?FM>WO%b4l@sxfg9U78mVg3d-N)KR!F>KBfhSUTd|)g#m~hCM@m* z^O*vidJ|1WriFb8egRSX#tR*yr-C}j>o&T&UBj|ZX>Mdi zdK5gDXHN;W!7KGUg4mPI7XS?FlAr1~(F(!9wVgttZlln%wu3*@-umW!n~xYC^i^*{ z3mV*c3{@~n5@BG9=x^j|Sq&xnd?ik|5PeBg|B>WI|Ey5@2zs{D8Y@5tmxZQE41?I- zPUNM$&p?@RTM&wrD4h?E99EM2NHZl4FP;|M*q$$oQZjCjQYp6+1mGFHnNUz{A!z+f?))3cm^go`+RrjK4snqEI`Sfy!_-~yM7Qz!c z-cN?^h{mnki*3Sjyf2(99S*pJ^0hvS_lAPt5^YsGK}|cvkoo@+@Y&0j1vxn_GG;I- zKtd_2#6~0@kbt8ACs>W-jr%`)Aa0!h8w5<@(}2CrG{}booTWrWA0j)eI+ig^CX{+NAjWo$dmvuQ{ceN0I2ojjYsb9 z$y+tMc~(kf`B;nNG8?b8&=P4w^1ckaL2a7Bic$fX)l(fo7?8c8oO$`G)gg|Y(#@6w zmY;HRPK!mMXwYDS4icbM4h3M3%xUbczp#O9kGs#)BZh(EW8x}}z?ElXf>O@0$-c%% zWW8=4o=Deaft!G5#U$Zj1^Fy(%je4?mK8ZUMkz;Zk(`w3W%{aqQc{(-JY_1r6EADqrAv5lSu=R$^@8gF{2& zF2svfyuEeM?Rh1TsL2%+LJehVjnJ{qq=iWIb5 z_nEpYRS{4WRkXjjSpHwyw{J|g(U5zg6UG69fl@yJi9{jq+p=O(`GM3i4yU4JSsGj^ ziaI~3fwAH-%cIhKOx_cnsN^uTBM4N)2Z16Ao*9ZTm1T^4x!ymzZ`87%K5JD$tmEPe zI*U$MRdorOpFN(Q4Wa@BD3c-HLh(9q(<>@JB*9gWT3b7-X&WtUtuJ@CzaUr=7&R7b zVj$D7~-tetsu2WQ$xHJ~y3?QE*>g-8dMnG1P^CSm0(~KijI@xIa~n zETKXGe{7bwgpjf(_XE#)W_!QZZ;nW!?E%qOVE8+LBB~+`jpY-j<^zF^aqU%4u-Ri3 zDRjHX7kjn;@QbA3pr>dhm1sO34PcZs%z*Fb)9F(8)FDA=L;$Xm9^W?FJUZD2ngO~h{Y$=o7p*~ADJ>8IidR+ zHdZ{+<`Qkv8XGndym%B95EV*>?9l3ZYHGls{YzOw)3fY8i8dG7Wl1JiXwWMJ0LM@98-8r>;IP}R8<{zsczST?$}&~n(ZO`o=g+*_)NfWw z3BoZ-VizPAC&oIJ+vrC(bA^vL6WA4U^oAouU3mTr(y;1G_u*OrJ<)IrIYh7ogYZ;L ziPm&x)H7kwQ8?oe-`SS*=cElo>HgbC8dCyZtEH}uU(HJAJw)s+>=>uN&q)f^tb{)Y zpm<|E(%^G7g13O)RQ3jZ&-tUtmV0pEnJCX!vLY6Ak6cdNp1rTC9*w(hOyT^R3YQ$w z!2a_5duv*QjA-kJtXvIq!P$Vu;|t5-C$C)y#L}6WuH65cVsmsDzn~MVD4H<}h}Zcj z9d--7+n8X_e-DOc)Nv`HiCgWNJ?-~xX8x`EhpZ$?w;X8ld~LQd?@+=4#+S1xC)0%P91`Ce`= zwrceW0OR2xJk%P2nrk%Jl{+d9^MQe}ta(y_=QcNZoYJPm_grTKcN*n#fvD27A!dGF z9Ri}N_1-hKwAG}93QE+6kr$oh{@hOQt8`Yl(X1HwBl2u*ZN&ROX{TfA$ZGm1R*P&= zP=nx3YFHs*QyfvswdCTsMsN5jT`NyhZJ@;_;7B(5fNdjbD6Cc1&sew)&QC>PfDalH zj0vGa1I;|B^y+G{)%{U&4umYYQps}8%nG1NaX9dOKTD0daXQ5#kIHT5HUZlsR{VzOV5NiQp1$I^ z8{g*L8yMFV8@_H@h4^c0f{UH zqOC18nw@%Ks)z{;v<-jX$CVyjTBV~!>!1Mxokz~^B9%h>!Wnd_I359Jpm<)HSCs<= zo5YJ{`i&)$gQ{wX9^o5(#Ce=6mMR>7m< zmghH>bdiiG5pu(G`kI)X%?B!A<;UV+Xm!KBFTbeq2z+UO;pEESi*q+}Z&3(0;<1bG zuxT(4c5%&R#xkLSgDWgB7#W%+vx3MvJX1!^Yd86+6SJe}+Wf9*s&po?$tROOI&kWI zG62+3hhliiwhv70PgQqDmm!!6g)QRVSc*`L{7=0mk0EImRid*{D8nhm@iHH}Er{Ff zZm-4EE3%wfPeF~K!pn=!OWxT@i_o7E?U*Ud)3^N@pH`EXfHIAW^o|E;k^x2-Bvc82 zv`LiO91s0u{piLP-f~jvc7AeIv9M!)L|e9X-kq3OC_XKaSFQv)$VoHa^)Z=_GrlQ* zeXsYa2Z!R>?@VHnZwejqY>$p;D7q0&8Do{&Ys5R6sKQfBLN=;oOZVve z8+-${mgP5Y*=joT`&s@4;e1EA8t;}S`g{k(0$kEl2_PK?R7Dn66Am?~E|8m|W6H)^ zzcSfa&!Cl%7sco11x=cZr_9#xy(2Tf^G_6cXA;sPbRY zsUUb6nYBgmvc=0a$b&<&k5)o1n%?WW)H)@+Fe)`aQzei0=7ORs z3{`Ln#x{<`g{PG|tNV+SlfQlskWGg-Qhz%XHF(6leo+G~Xat;|MgtomWo?4(p%G=A zygy0*?zv0ua^wECsoBN_oIZd4C&z4yYctWWI;||gMJ^?1!tC1Tq^99-49aa5d_Vy% zIp0NeOhu(4W&bi&d`U8+StvgQ3QzR>YDxOO?0Io;RWY(-{$OjaXKQV3d;3D%+>J+= zRzerbAb;H>quPe$3f#$-y1miU^u;^B+7ZJEe2wQd6j)}*yY}+6>sjIY1*h95U{kS5 zoId4C%@TgcVm{DzN2ei^>73Y<_z3ul^SkHKIzIY01giOLA$rIH_?3Fre%6$O+j2Q}^0VdlBEpmM_&aWyLqJSeO8JxfDo4 z#%<(FQjkcURdyv`O#L=oNNMoSPZJgwGCL}@KxsQ=x?V-c?|MmEc?ea6(Kjwd@dwc0TwK+LU?;>1g*C4QiDyQ}9V-G&p7Uc3`n#ru1=76$>S1@54L_xlRB>%k%wmMdvFfO!;%mF}7MRZtX7$2(a zYF|_Zn@;}@x8g~|>`A{>E2$%Hd}yecj9StzNAQd;A71Q@7vY4B-C-g#Ti#+&_*K}v z7@0w-c$k{pd&__X#ijTg+gecIB8HFWkB($#Tft*Ak7+4H6z+JmJY0>nrFH_Sq9XYa zu%dUNL^75c@vKj|{>=2=UuW>85rTco#mUCOsW{n1enW4iaCXy!?5!0KQbTB%qQKU4 z+9HX=4*-UTtriPa-NVzDUMV)Z&RE>mKn0VgM~?chvV-PKpIiaS3aYIkwJ)^oxURnj zlWzid*B(l|h@!Zf%#8}DfYU1RPxvAWfJ3HPkn2NAa{wd(KjZf|4iSLWvfXvQs zhme1hhNkH3n*wEWW+37DDlr@@kj3ty|3r6(>?rsC=a09zlX0v^V>1^g*SSnnNZ{Fb zpXrt^WRr=~7_STYpR284L?|XNW=P_Wp zFnn(67>3sVO9(;i%}e6&)zN(u&0ai26 zN3L!`z7K27Z!xunll4e*8YIX}2#?ApxX=8#zZ-godRrL?cu{#a)E{x=v^nM*#V8P! z+>@?#9|bFdAsFzvwlR{a3svqgpv$nP=}Gu<)iYf!5S$FMCYwox=l8 zN2WsqEtVrD%w5BhC@_^Z*Pc)0z%vnPh@&nZdt+@W8-|_lc%_ZH2GF*45~lF_y7J;W z2wvlksG7sxH~xm%MAzBkaE(xX;|?^C-Z1VTqCh$z3m9>Wn)PTwQObmQJ?$F|7WA>tHHXv4;Or82Ir!SOF z8!t!nx%6~wEdLd8d3sm8j#X_8=Db`#YEP(FRszU1@plKuku*iGK4Zx>*4FFp@2lBR zb5#tR>Ce;va_t1g1EQj4Pb1^0_|PC7)+u}JsvCxLEZT77!1H9JZ~1SZv_kp+${G2D zH9JIcH{yk9z7ptJSiTDs7e*&!LWRh(@9@DOd^RVahycEkpvWfg>GL&ktGB1(!q(HI z;lzq0z9@hSoaHF=*V#4#7p3MHS|Sp;txpRukA4YD%r^6$CjD#PX?a6x%E=iRFAkaw zvW)1caj|+onddiw!(&TZqlo<6u7rH%#~>(zmqEB;pEmv05iy!K73d;e9nQ9|JsKj0ptP!hI)Kc;vSaW5JL}EFy{( zmBCu_n#bZT13PbrAwUUsjLe?fJ3Bt?UiFq~JZ%)@yj&YV@A)F|OfwgTO(g?mU}ive z79Q{xpvqw534=f(sD}dg$;$l`UF+EwwQe(3(bjd&a5M&>$dA_n46qFFxBzoO5Ib+Q z^-oABP?6)PvEko*F(KWu_mj*#_sOI@Xoi`5_sf4ZM*EiOM!*c!Vb&tMlw=>-IhO%J zHCHK)W}?zIW4=P$N(EH5K8+-%4O5NDrPs!?>MJn-P>Hu~I7luO9h$AfWGd^_#?A=A z%ey3p)sP+RWtUkV*Ff%wj^crU_W6n(qEXG)mS5C~{8C_NveU9NRX!sIf5oKowM7s*1*}+;#Qf5i`q@}Utt+_FE_?|p!^m7PKo^OGF}$|c%ajM4KkcgeiEn%Kv#(1V3NY z!c!ISBX2Opek5Z}?_%@U?dqTY#)e1I>6`CLKjPp>BpT!b=fUCuDy=%6YFfzm*HY2R zth_dJPrGhA744twN&mmc3i&nfei1ADu3+_@43cU!edDo0W+QpzsfH}F5S^woK=V(b zu=Zha4E@~6KvG5RGn|yGKrR+QtNWSKKy;~9K2z${^ok*)z&HpQ+a~s%oVibOALo;& zO-P>E*`HEZ>L0s7KZkH#Xv2+$^5_ zl!VK>b_n2-ZRx1dAV}|iIeK$B=sg3FyxjkROq2Jc49!OSd|IZ%QpmFe|pEsqJ^=8jYf?bPPRy5=! zqq3OTFRqCLsQxU$=WVmFNRvKSjb-F}L!M?VB>isZ_BDqzC-Z)EhV{lZdfVEOAN6)! z4F{=HvY+?oa-OY2y#p z9S`-P>R*zlyD8QGzU*d9kU9a2FN9_L{mlsSak;ndiTJlApJSE`R!^$A%nRgb<~rMc zH*4_&9kOKJ9ok&<|G+nJ)TrFTDg0_E=gLE#X3SY7j>M|o|Lxrpk3h8zU+mtqSU)@b zi1g9`bwz2x@@-3~7%tD{*~(px?R)v#zec_sbQ4wXxyn3A@%xTx1u~;87_gzx96;-3 z!UAn{>S@s|?}bTQNF-9xN1(SM1m-F5#`ku5T>;xVsJkqQ;#JC}xex=sx1)It53$Tz zx7#A46`Q08%pYUQAwt|6C(gHclGXx|S`l|W5E!G`orJ3Lv89%l5h2gzq^8&V`IqiD@1ntn@8lMn7#@V$bqNgKFS)g~RHo5Ug?OD( z5?=NtS|b!bKw7uDR4>1g^>LsnI&W&(L{Q+2PX|cIdxhC)xjNGlV$$aJAfYS?`GR=3 zrG0SJH6HUJ`kKR4+lc6i#_3#!2%nzQ!nf4yB0H4RSMG~lCq~%lE+@A}YNNCau3l=q z#Puia=&dS`gy!4@z$DYESg9Qu@cuo$B<*6|)t?uJn1r)D9=Uf*e)1W~afJhuSGD$K??P2(Z33pn_^-3fWD6Xff>N%>t6EsnC+Juh zD;iaVBgaciQ;~~%$48ZSBnv+$jZzxCsr)uJ!Ylg2zXOVa46(1G`RlEQeMR)x>HI`& z(bu(XoK5qPCP! z7J3te&4dn##u9|O|EA%i2MJH(`fJ4zHovNDzr25c>84iU=Qd?j7R$X5nGd;Y{IqwR zm%ke$=tlc?&VwQ!kfiXAjX%GcnA4n^ucV-o&)Y=hnIvKk{WyDeME>s%{p2qKCvx`1 zV&eJ}PfMpc^aU*%jFBaY6^5_KHom|^O|B!kwJ<&-4XZ}W8{ZdL&meZ{DzXQNwzw89iT)d+@%jkV#TvD;oT)t6L9;(V9uYWg5 z?nqAs_iFuMty1&5ysR{s?T+1!f>UJhEkD01>G&?L@hvyEU>QBTnr!A_dtcYjqM+Dz$t}I1 zsaoJ!hTiRJho`oyP2|Z_@7hNs1E_j}#=m!$vTXdI)L-nGr#PNh8;o-wvdq3Mo;Wa7 z(TGzss-0@ji}n5S{GxI-ceVF58`I$55XQ|HlTRct#}$uAJ1j_bu_0~lPMJ3$EMDUG zibifO8#=!s``H1>>r*{%Zw5cD@aPozlMaa%Hy9*vF(7EYjvnvgZlwM5BhT|zp{zpE#bdQII&gYBL2uYK|ZZcnTIB2l`s@JwxicOmlq z`16|zzB5?A={1Sn}@HCJt$*MR)~3SJiSw= zI#OH>b{Hf3l?~0R8;8p9JteA3Mq?)IkFkiD#Xa)8HJ|$Eg9Jy;mbZ`>PFkT;t_4I9 z1hjvN9!}68AD(5K>*O~0>NN{BI9|w!m2-T#o@1j$Tp82$F&w{nPF#$Zb_;%Cj!{n7 zOcoR9m7$#lPdwJF-pxwjG79s5uMt)@_Pi&xT=3gK5TitM$r)9+Posvqyf}9vEt-j@Opac74q#r2Q}cjBqXw=( zExT1bwi=WP_9XWiVMp}@i$|%*0jnl|*_g%5{*|sO`Hcg^BzNb-LJ5><%Iy^9=r3mN z{(tCywV#@P3m%gX^e~V;naEwQr^VrIj%#oR$Sc(e$PS6Kr<~!6$FE~^C6rt4Tev$C zSs8=YpJC$bs~2Ork(dsuYU-aIEcu?@QxnGt?k}1V=zdh%&0lRkejl(60u&E%pV(Nc zkiBBU4-?+;ri6=UX_<~EO_CDdKdlxZG#LJl(_8O#xb`?Tjn&g0=IUakVn39-6z3;{ z4N!`*xV8AGRiG}Av&ZfKp6K?Qkoe8Fh}7S4v?g|Pa$AcH&Mlc7;IHF1c&TaM`R;wE z)i5?RS-ma%m~MnzYkLQDyXpn4KdW2H7^a;jJ32qYK`UZ>;|H+A8{ep@b+oj8)QAqS6y;6|v zz{~HtqzV`syFgnK&`f`SZhE$SrEhq)t?u8^_z(Qy6xsH^j(8VDxz$aJc_?`%F^>DB zXzX@a?6gQo@~<4A@zfl1-Da4Y?Qi9hPBy+Ud7N^?>BVcw*^1A{7!41F;cFPqZ$3vC zI(ZuDHiJUnH&vh(3ABn2nNow6*=pfsR!gW`-Kn*yAMgx8F~8GPoEo(4i?(C^@1$gz z`!D~!?R6b^u-KHr{d<)y#h_JXqhuYdyHL^b9iR6V(u$xP5Z?XYy)eCNj`trYo!$>} zO}jOG_jy@r<>F?@znIw5W!p0@biC%M03GF8%*O1}q{p86kLoL}W^iY*pzJL($}5QZ zVwk+T=e79zgT>HVt7qtX#f&0maX?N|Lhh ztsfc%AFtl{0TulFmx(>i4f?n-cQQji^5*ZAiMDF}S77C~u-@gQ2U6jjPt45`^UOXB-9pF>;WML}<2`z_{V5HZ*Hjm6=>k{2`18Z^dkse>BM<`(Kt zaowKzy-aaE@(rYA;&zhk#uHA;PkNT|s7kQlyEy~l8h=e%MLbKuPJu&buEf!cfJg_3 z6_u3S@(xt~CA!6_`NP(zz=n9W+$Ker%jOG5+L|-WzRdO3(9VDud@(DD2phbmw7%Qd zLJFdoBiZT+dq00*^x?q^bzyncF6p0=wGu+nbn3k}K`@a53T`#3*^!%=}Np!xTs5*E(65C^zO?`*a#q7mS5)qmuGc79FzqPkwQgQkU zhZmJYOP6yL!)(Pf8NY@}-bz4ZW#_Y8fBTqY68VBJI@Zf% zy}KeZcZ>PV;Lzc;>~h+d?n^U?wF@vdDkJA(2I8AB>U7@kk^3?x?HBpaxIm11#?QSYR6PMnCwkM znNRp>h7FO2cgfKD-O`T9hVLYz(#Nz_F-WGGC>Lv8P#%B)?8Mcx%1m#xmRSkolCwV3 z*ABUpXWuR&)^G} zGIrO5cw0PBglpiC=>z1jjD2AAF7osRQT2Eu*j7Kopu{1633sebP^*V90#c-r$7$W< zdB5DUdNMMuXN{K^2d*TTlBdxYF-g2{D%-MHy=|9*e30IWULpU3-?a^2Lt4 zrY$z}hQ(XdQqSPV1Ld?qvkpknal8(4r*q#6`D`w z+eHEO-zZvAuhkEQjwokXx7wVDgW9^)BSq~LhRwliYiJo~3lEKS%D$_vyu)uTB&WQi zErN)~b*<~F1duMjEpP;#iRtvUjqszU?yZay!L}0(F3`^P67U}c#f34tGSyDi#i|y0 za&1XX?G$xcCYtN+qcqrl(*vAH4N;COSA(#r*rhKWEwdX55Yf~5j|a9HcWwWliHc7# z#K}1;svO;zC!24)4S@)GI&fyYNoUH5LymsC{A2D1aC-G*FR~3b!xQ+J);}QJZ#-hu zKOd;bIM)@5AG5#^-_Wy9rDDQv{imlV4<;44!20&M@ zYCWd*o0i1O^y@NH^zjhgs<;^#b0~)m8DUOf9#{u7#r9AB65Ha=e`X}e2jKb)$S+=W z&3cV?rJ6t33)&2fu!nscyVLj#f7PirxOKYP9AZ0w5H)@(%h`KwCU zD>;WYPWOCSpdJKD5o1WhFtWJwa~W~1N}>qIcAR>}wG3o5>8#XU!&05k#4W zO!gLYMmaLA?W`42{5GM!EtFYqz_-At#(fc7DzCzijI>s5s{@+UV7vK94nfd={*2P5 z7#@w5W5)6WHTp{mJIt0qv$Z;Hyc{!;0rnkVxx;IyvtlK6JryB?h08l_bH0DqrZ`y} z4V^vSA zb*V0k2?vvn$|>^+tij2Yzt===5rf;f2Z1Z)`perb zRjqQJoZuh~U_62oUOzk$YotG6 z8zrP5+rQgtdjyWrHO%U2y+6;t1;K%sZCxeZ(jP)tH8-o6ikJX>LOtsZ31=<&*l?NX znH&1C|5+{|iE{orw0K6$w(u{mK{WCe$6QG5!j@Qz*%O|TK3aQWL@6S6?rl|DYVLxA z*06vUn~R5w-z|!e+c$z;Slx}jy>Rp}V^3YMA2dyp*`t$4(h0qcQfs@$^I>+vPgHJ$ z)F}tQ(w(g}Q2oNXBImLWqhwCD@ZpZ-aZPsAaVRBe)!M1pDJ?38OeDUlMdBPf(Ho1h^iA}8d1?JzNj4o$!OW9gG)yyvZTk1 z;!nro2l0Qd|2UsK`bq6)VA*!;PL)&|Hl5BV^UN);ws2MWh1D4M6RfsTkK=hINq_7k z88Ve2(3lMB($Tk?+9sKd&(Uhz;St!mx0tbE#y~D2p&c{C8fDXxDBY`cv`Nip(lVZpZkiKd6NB%E{62pWhzRa89x7(wHFmJ>2sW9|&U@cq3wq^sgp2pWlj{Kg! z;UXol?ImG*(${$mL0Zy4MdX8UuBYF2Cu7k361PX0|)LW?y$7iR<4K$yzrMD&_(WsSK6{X zk_nM%za=}xI-CTU9}liWC6fYJD}h7_B7eRGZD@INWq!@7V}6%0n2D-gg>HHY+R}LxVOyFebKcbBjtb-{ju| zOQ3OO95yO!;3g>*mIhm<@rBZ9E{R+)!|%n8P3uZJI&omPwNmyqit?nucc|K+`{z7p zW!kP5u%+p6RCUgaYq#OYg5V!{zkilBBeEs~3yG*SgBXb_7if6AmQ~U9in{2giS(+B zK>fqLgBF%xF(ovFp@TLbDtHk%%A3R!LpSd~Bef#)E!Q*nB5nQyjn+L8Cd0u~z6;;Q z3Y3@ck5}1AZq~KkR@)8}sVEROeZLxFoe_UTV$VCa5hGA=j^IMDXCjh9 zxleY{ktr!>1rE^fj^A-4{e#VmtnsLRFQLTMHvARwD{|Qi9l8jqJqqS z%&~MbrNIl=QfzpPOwvki`_)euoUih0%(DdHk@j}@$wQLpPR6xv*#G+rNjQle5`3lh zTw-#LyL{#0Fb(6ciCUm?+xjHu2PQ)QmbQU@_E#nfg{&fFRw}&7OH&VIDq$+_MaC_O z7btluuD!?!vjc%?={_|Gxa_ve<@xMM@s&BNF{C%afzsKFz{M@RtdC3LUq3R9X>wIw zJvps1VJh#R&mb@_Icx3SMe0qEjSQ+ag=Wg}fct~!FXqxXjNM{1bPz}7EfvU4b5Ozy zsZc!3=tR>CqwCff!X5S2DGAGg6vF?u>!#E7sJz5lg!aEhjhI4X3>!=~J3Ts}t)W&$ zcsD=uMx_#Zb?X)|=GVP?`zfs3D}Nk;IRnd%xjt2_jW075$_sy0GI>x>W*H?@RC2_R$8 zd+=aOaTV2F5KWmjlh}NupEvenDPH=~fEg;ibwaT@cZ3N{tWLdsw94Cd&*EyN+Z~C-2_y&;(>{kYc{;;Z{ zA+aF3fe4OIbmsAYJ)EXS|DNd)IRqzmF7it98OoA+g~+5zkB@LemhXKZsD-e(&)lG`~|!2&%b;Dyz3bXr&K$$ zt-|wG*x26#t>phqGjby?jMSxEBH*57<7JL{63%Hx!e^W~s{OzBklAbt^ROxm-IZtSqhY`_MeF@c{W==xRdX8SEl z5Jm8-V`H1yyn6HdRm-+dYhpXhBa~|qqdQsnu`TT&A>@2zLa$w9G*!AQXsP!`(*B;t zVEMF&lRiNh{vr&X^b1#-P%?^Y3!fkTF0e`3)mr&RStdT3gPinCAHu@OUN4A`%7GdiF0Hk9S zJ}G~D$74d3jb=UN&X&s$#M#o(?#mrs{(5U^Y1vEAcTvXNsfVNQ2|AfWS$4ay>Fr7B zOZ2kre=Bl2OB2C}wWTh&WaV*gAsmwaZczKl5I6UPPi_Lsy7N{-rIW|Gr6hcALXp4J zAXZCueAQV_IJAE|`f+%0ch?NC=L%ijY+o7h75q2_gTWq{A&*GX$R4FM$PP)7lFd+@ zA!(DzW*zmN@TqX(N9!!AiCp!LAw5H6>0i^EeY~msMP5`p^t~3oH|zU9uY$pkkZqfo z79PhYh*!NI?*R@347CDHEOuco#HPV{t-Q`?LEPgrQ8p&bM>Ht^CgExCoquHUgH^C{ zG;ar7@#Ax4i_-l#EfRjl=!k5KHBzT;xW#qo`m2KKCR9zcLQ=);wEM|&j;ZK6y>-RC9& z+_Qfa65NkA*OyFs9{o~@`|~-rifYyw&xGEd#*;~4l-qJ9?H{4BH7l2{^74dy^83sM zkd@9&8{%&{sk<@Mj$HPqdo1|l21~Rkg^Rw>?1~2hE@-kly=CH7(!ezF={|dqAx8@u zK7w@kgj4cmGc)Rkqzl9SDdg6R zPD1W`D*&N2e)XceZJ_9J`-9}Od$7z^azr0=SD+L6m&4t^Qgr%#C7VN$Sbw7{{CZ7T zCPHKMByb?4i7B@idt7|Nq*YntqWJi3+zdJ3Yxx=eqJ`Q8NNbyi?w6 zOJvKsGfpI#o|?;zc8>8TkaV&pB99q%C;u+TsCQ3=8a-l!)P($&7-DZ>w)7Z2Lip(R z&J+0;+Z7Hxi}>Nh3=Gvm0Nf6Y8ZBsWU>`;BY4@{qVruMmhtFH4?M)nXxk$PwwtG{R z$(^fFE3Ldtie=L5o?%IcMlk64yU9xGnuOacCfx0?AA8uX^JtAX^ST7LX){2aSfKkh zx_*$rI6{3*fffnLTz3-*t^4xv;dy0b ziyvwUMHLRjgkRO)$~I2qSAxEWaOA5I&c^o7zhX*3G5;(eKc3XE3j?2XI4 zL3E8RW7_e1OU(cA+zGIU3ndr&rmk_1LM-Hc_d%h(z<&Kh_&Q%zw6%}fp42evU{Ujdhx9|sTz2>DC zd)}!RqYo)x+4&%JXDC4b<$fc%dIL2!(E}*1TG8XnUK3`Zz&b5`&g2AWrrOU1QbMKM zpEE1A>-adD)yRnNokg~kc&s?VWBUMi^l1WI6D8S%?);D`Bh6`~zI=3oRcQCGEdWf3 zqQ9F}wZCB-wVyvz=(QIFYkqCzNV`c6m#>~JuP%91QR&gDVjVh68%E{V7q^$Mu!Q2s(ir{O677vpu@_x_A#E3swfQ(4q9qgpl_eRCQa}pqTR{AlifhZp!J7g%} z=dd>{aa%<3EiUe{{Usqs4jJRjeNXMiOpWN~{QMY-wkvbe@B)!mU22JhA+53%zVAh@ zy&%a6^YcWb)w;a1>SO8>nmn)`*nj4DM4CeUC88U1QvrcCtV#_F9#_FjtBi2g8X^0M zXW%5=FwT?b1}v#9{NMqBX{caPd%1(Cq4DNA=JbBy4mn}O>lFOc)QF`wT zz?E(>5tGOJyK<)>oZ!$)y3U%EZ_L1%dOnF!=ex&>Z>PM^Ym|W9QTj7@=-7vh`RUWx z38Il>h@U8o>)!j#so^Z576_Vqx|cdJ!5%BFAVMCm$`Mf9Gc63|<1SCku`%yiQ7r#s zh?D{%NwDf&wW5m9!2QWrEZ7r1_mi?>5S`Ba{psM~;2wZbi`}T@vJ=YO56&o4%6;V% zR_3CAs-fs1(4p9 zWPv`~=MnH5aI#BM7ekX}Od}|C`*Z^vfcCk7Odf2IyRK=)m2!Or>T-4#kxVHZGIr|1 zr$zQ>Bx%YGBW0k!8)}r>(L+Nk-*-AKJH74K2_bO9H_pZqmX1M99$hJwE=HmPL3y}e0acIx z2E1;Je6$SN27_SU(1;4!4`|b^?zz^tF9$far9_?Q>7wzC!;e?r&Tu;*bKeZ|HOK-R z${C4hxS8$4S3o?@m#;rk-G8E@WoLKA4)5Ux?sYJ*+<+f<18g0D%CyNjp@X2KeVTax zCw+VA1Y(5CmWXhl9-5!lUpj^INR|zX+5dTOC&v&`YwTBe$STQ6tX@>8$^a#P9zF?A!Orcu3?5;P?qor5q676DJ z;rif5Ls7pM5@_YN)k(wHAZ%g*@4Mx*=8yENLMI!j1ZvqV<{N5?21wQ_&ELQTS=EbG zkOh-)?ZZ5|))yVgJE9UYZ4LON=;4;nUl7-%i<@~qCaGLt^SnXHmg=3jc%|JMxtR=Q zglb-%J?D1ctMmS!FQ27`u`x?%Y+&%p|M56DX=ghMuIaZ3XFd%(dVn+|ei{)qQ--4| zdc^!XIAi*NRv)~;&8|c|&2wrzA{xAEuhxl$b*_b++f5i)8Kk7md&@%5 zlSjnTgS1p9k&p^+#|+UnU(gsKLidp>BD?btOyv?t&Jtys__LGCn6!TYAa1`U3$^1E z-fUwe%9S8s<-$~?5B3Q1-PZwzJ;$KUFq3fHWkE}FEOE(o z_Og5Yas?fUfy_1lp_vg`1mzY5M!WaJGOB5Y<`L`P}u$^S;`?MiTMPhZirA0Yb(ZM2^#|J2@>Fxm5XSM>I9H>v0E}tf)if ze9=S0RbDASx{Hq?cY;KBK(2&ZP$)B?Z-z=&svFJ2vNm>i7d>Y#;zvu4e&6rgFr4gO zz{t+-G5vTCPoa|BPnddxXD8sBSJ|4E;~k05u`3x&qsr5~k){uk{} z4Vvfc8v3z+5os#5=oJ>78ou8tax)a}8*pJT&d2djU-!xOjp6Qcvs;P9gh6|$5ij?_ z$yYwkI16V{twIM+iJtdQFLkQ(;AurIehyVv-zGEY8KnlU+{%HKW zXOa4D3-hmVMI#3x!c;crh?o>|c4Su6)zoCiioj^(jrD%i?=_AHMG4vee35o_L&F|% z+|k`gmnpnbJqfL%zZfY#lQ-mmOVA1Pa!mw1l$UJvJ7$DQQZeqI_grSCXL^Z*cP&^t zGoa{!FDIbELk~3hESTb8HN+T4&;Eh~&EDAxVc_(*W28RiF=7y{l;BpG%agNteqa>t zIkfDZ6B;V=y)$%Df`7gZjCG+89^Tl)zGDkN<2=u8mljqV68Sm?;U_x0JMS;eW;y4^ z!if3#vRcgnsjO4592dSe8qiT`5@41|u746cx88X%mv{ALMv2 zrhcoyBb#MED*`Rq+z-Q|5WiXgLbC?XEs(3~d>_tH08JPQWIMyBXiqku(u!LB8w48LXg_r;a9S@agdx_&f*yN;yXh2cg`>3kyRF3HyrWi(r^ zWsov#5|4eSkmhplq+Fvx+eHm@M7YvlBTbN{kZ?mHm#;w%5)J#DTm77o0#B?%?YmI>C_jz_8}B_wx}1zBxk9Y|E-C1 zt~2riP(gKz;UqhwCCKwSzIa(~Cm%1np@R-bM|%?{(`+Y<55D!-3m;lEAJ=XKJZ?4u z5V(G>P7$c@{#z*PJzfp0P#Mj%(jeuwpO!6b;`XrfO!#e8{?8ALl{G0I8Uwv|v+;w! z0GG$fow8v)5qpaZL6t12w@7iw1Q~;N4iW;>_i|RxB-ZcI3xYBU?%#^0Gtlg^j+Xe3E}|b!jtfV{p^LbFN7_jU4<*4VmQN!9F+B zNW*E3BO^HCArOfI!(GsZ`w29@PZ&BWS!il8Mv`y#Xq8qtT($a9Jd{jdMi6!S*acP23pw@JZb+o5J99Kv~_Co z_IdcQ^P}wmgg)*zmtha2i_FogdHrD{R5ZwK5)$)f_c|TIyJOd+S|MB31Lh^3*`Lc=g zqc5e`JDVQcy49x+0Ax}TyZrGcIFto?aA-1KGBa zGCn=v-28g19!e+tEX`+c(gM#Zdu=JZ=$v-4UZT&*7M1pD-H3Q+I=V@|sTBM@MX2?v z*@B&-Wp}7!b3g3)ZETESL&>!;dgwx10urkNOqgoWf)Z@@(qrdI<}&V&_#IGT$27mM zppFdd7%w}>+NIWM$B7WEUHv!j3&JmlPpk7x8orYv^!v}(p4CR4Ez-qoW(2}I@34|r z?}>xx?9!CYJGs|zglT+pzMJ@d_Z0vmjDp)z*l)Bx~&F zbkmHw)DZg4cB#$`h;%hZoYB_nHOv{n06QfcJlklu4lPtv&kl;+b>R)96p*S<=hsgP# z;dtP7^;Y)ViXoL`+k;ij-5(Ba2p;vgi%m9lOX~*Tl^s%sa5T{)aL(O*q@UXdc2*xV zJY_GqtG%gaBc;&|BJ%Died0Fmlg6jpmjO}`?iVV<@r0?nYH`963mND)xW0{xxYHcB)F3? z3jKDu*|@A|#Z&Ef4qLouC!8bG8-&}u4q2N2vbnlp7fa>k%@p1F0&VJr-CR@NqlVRO zhP$Tm>feq;LCItqPr3k)s3Z!es?+Djty-h_&YK}O_L}t{_uXA*lMFbNLv<|UxiO|M z9*XH}hsbf;A~H`Smi!*)T}8g0dyNm4!ym zoH*vs)YHR+ztR`6S&-k#P)oiqo9J~@Ez(UJ%-a`nbP8o?(M$#XLt7sNP9sldH^xr7 zK+~=di;yQNRgx|Xh1`&|s_A^izY^*&tQEo%-W_K3X@{a^cYFK#kfMUrHLV6N z^Wo=kfmT|g_`;$P!T&GV^ErT(Qf@y^2TL)D2%(e!q9h}K^687>CR610KxCA+sd@rb zdj$8uU*lEM-j^er2>iRWdZ+|->W}k z;Mel!FJ&K|hn?<6L%slCe@s4sL@~za@vN~S@BPe&w(L7N6YqSV66Ln#qBzI=+SbIY z{NI^(Qm4<=3$er^=6oM zL-qJ40r)iA{r;UooB(vf+a)l=9QZP@bw5Jl)U%e{B{ccg**)N`!?HO?6hg6$r6;)S|2Jk=cd6^>wk&l|4^t>%hT2B$ppw+ zBU)E^p@{B(g|_vo-*U38-u?!;Hho2IcVM-wK%7EcW5oLc^2if&OqlD-AoGTRY#Iw5 zFp}#t)oWHFS@vp9t2O%2^sB#RZ<2$KH*MFB+rDCO$!+-Axzy>$UV5Qz;U&Yj50@|= zOB{DY#6o}f8)?+X*gD#7YOuF>$+P)+jp7D;OUG@+)M9<#?w++%;qL@m3q~ruDIP z-KKf5FzRM_QF+%|msh_mM^{fD?4?k2rE$IF^_EJYwB#%*(n^}{bUX(tn*REfIJ>;o z{$OcRKM5^yv5q3j3KE(_6&B5!$LJqNsqNVZ6;B_&y|V>=goGDf!;^#s-+=;lfgzQB zzSl}p2)vFBh$nhz*^5XlObHQaxaxS*@z!AHVDAK`V&NJ{)NiNq0nur4E4T(-dZH+T zAXz9JDfpi`DiJaPH(>Um-e(sdWXwby|0Kt?V@+=O+-syCk|e!#6}0^~REYoBjs+Nv zh9^atg74f;>RDdr@$fEGxv}8_$Zm7T#~59${^9yzUMYzdVYc#Ndo3HL`eibWy#J2q zig?Yq)|ublI6p*#7z!^!88hdxNAI+0NdPV%7wVBr*%a_t%WwmNh^*jHW>4-tvudGr z<>waSSb-3{b@b-9r-Wx%(cmqFQHfqnU@sbZ;Oa0H``7;1%)_GB2Zx1I0 zjB}9&ZupG2-cCEr3^B1+qIf5d{uBxwjEw5x3^95sWt~2sTrD9> zLcToL_wotBKiz46)Y_16>@F35Afbl45(yf)sp7HRLx4^SSp9Da!W#_6__w-r%DrY% zqzbz76v=U7U?|s>#trfPh&;baLb95Y0-O&Sil#*8-l5Jh{RhO3gyqB=im=BS_Sk)jT%oV%Lg6)8A4)v$svl*5{x_=q63;BNKVyO<2 zb9;kW>uM%eCryx{d`9FIV_Ir^i(?&k1qtie6o@TZ2!C(`D-ZR4;4AuY?CKg zzHf6jqXfO@i^|@)zvR*`7~yp%V3$o$avfqzYV=jwfXhghA(dD-Fb*lmy;3ym1p+9N zoFsy32D7x+G4-41#sT0jQc#>~2?%lk2(#~NI}wpB(9fc6(K#3v-#{IjvGDZtru~d~ zp-)0)=IQSqByFRfKS#t}ej=?Ldi`2Dle%6SAax%naA(SM5dd+G6k0|Kf&?SBQxfnR zk-VRSzv6`T)LPrJy4mgj)xgI|t@B?P5D<1$ebMATY5}l2#%k3F!@ye)oL>R1ZUtIV z!6Yi4=;TbVkk?37WYA<+6={fpN4CzyAUU<%Ehs1{sL=-fS=KozLLxqLUS>llwva;fdu|T~wE0dL=1**{?vVqi0F^(ob&Oq`C z*a!bRMxTg*KU%_&^aHSS9NJ$@%i{a}Jyp;>+41LoiW^OULR;J}J4YLxzLEq}!B`3K zV4F-0zA#pu)`f8P_q>hZe$a!AK46aQWbt`RlUVk^1|{qjN`}AX|I~!Kevy37-A3v< z`~VQqvrJa{PV1RbQEM+h{brLx9)Ls0DlQDLVt?lNyF~NHle2u(-1S!308Q^?+-xN|_^Lgmkn|emk2YsRQmnW`b$H@SS7?0 zRG^TgUhI^Q)XA&l(I+WC=QCUEDgTxDJiKd+h|^N?$nUnpzh7Jw{e_aKsq&kvJR&-0 z#^f6VNK)E=W#N0}sqd_zn~3Kp_S#YsuYWFsK*dT1amClI3+6wR;Dvj9FWyN9W11;O zBKG(+L~qPJ^XXLmWJIEFzs^}qN|9~{A)Q;WO2cim6Qdi=8qSW_g$Re&#Mx2PSYhwPP*qu*+nTPSzr5|{5>+d+ByX6tPLMa zL?I!s@6RUM7O5c|cf=IQP-1D~#nnKZhlB5-$ksv)Y!}`uaOe{^c_KUY)oW$(XI=Q? z0mF*BM4NnqM#=2Ua7{cO;uesd3bci|RNrgSFfhJPd#3^aK?CwF7}>GDS*WSI!*8}L zA0Y^bgtR~wkK;1;lF4#@BYk4KIr&)n5cK{5 zbFt|#;~HG4;JOA9L7kTk!HFR-wkXcCu1OyY(Q@8b<@qdx#Ra1Y@U* zqFd4P&e~enx}S7D0hE=C@sqq;sf&JCWcDr-I&GW4^NjW7lP>mP2AK5Gl~7~}+Mf+c zrLP+6bfAnmO=RIoJEkZNQm_3A%n$z81>Y8-P zy}ei9K>j=D8ura=BI8yt@$=*@t!x9asz4emX)*aug$BZU!&u&z3$~Ap16nD}Ct-%J zV;AT(n^AmO2LG}K7vay=W(iBfoxMll#bNac+8YfhuYCxKX(0hwJoxoXGxcrpazY&M z;+Wo{*l;B~XnriO+Hdz5D^ZG*rtkLtlcb2}JM7}<8qb;?dqj-jbj&CcRz&WR#1uSa zW^?~k#dxeGBOdBf@-0KxM~?Gop1;$V!gkySCh;-{+iSP{)X^wvoLjmseQYp>>A2j@ zs2){^*FZZ4P?%`;yHrx8P-SnKUFPmrX?h)aQR_2hu~_|queA1zoWVv-G$@LFUw9n?$^2B^#0yT;A`X&Uru6#GgvOW{|%4^r|YTUgP#m{Fjo_bt#y z&aLS7r|oT|?X~7%;BcZjRdczOWCv`-WEaRaVQJwKd7?4Jl1T6L5kNWs`^4FCwzKff z=%c&7fsUca1I%rEwLbD+_xp>KgZg?2%%2r6sl69|=AvqL;|Weoi1|pR=LshPV8`M0 zvN2jC;F0aX*rvGKR%|*T7uz1xMV4TAtZU_HT`x2*H1KT!)RWk+6oPnqMp0@~%aYi~ z)XDkQ(;L*xm1ur7bKOp+!8f|X%)1$!zGkecA9jnltIc!+KjtxiZcMq6Pr<(v>d!?G zG=)$RV;Il#&0$83<-rIgzqZC$LSJd{NWUYuV68tsdhxN3eG$w`Y91YgdK4Reu`(2I z#0s$TQUMqO%LAZ+j$a@D;&YEtD58rc0Q`*X9Dj7eEm+r~jhS*Ue#4U_G2xpe5f}CAvxR*tR z5*39}|5FVyc-t|!DHKyaVOqt}dLiwh9r7)o$2t4RYEbzwNz5RG@ynda4Gc0gwc{QW z+S=^zp^wSOMeiET!_uFIEO=foT}USW$2^&lbXbd zSwh}TvnYM{tk}E1@gzZh^0cO&3fTgs>m}{|bDFPl?<3#gtrnM|H%}De@SHl@FR_tt zlqpwGAT8l=h80oN)G;XWuxv-y=U@Js(=R?jO#@Gq_UqjBsDIG!G$u5E%5*oeY5-m0 zfU24h+6iyu*)tydYnjwsn)`Jut~H-_2;>5OXK=+dL47Efeb@oc>;%DrE|1l8&`8Ab zt5F;+y%T@#WNpjMjKX?A9-_p7!~y;fsRyYfuWjzXjz)+nfpxvwj$IP}u81r(V$do~ z1dg_Rww3OHB|wi|QiGtdCcM`u ztPo9qr5WV*U_v&>#hi?lm?i|}?qS}0-q}5S`vv^qpA1YOHEB5-Dci}!3e)Kd?<>b@N@!7MxjE<@&x&ohhTcQ75U0(NBPb)<0k9!y(3KU=y5eDsAQ z;ML8_q|m$yZlGQ`N1wBqyc+du>z^kmCa|;=NVzHP?VfYSeyyhPk_OS+>JOMzYlIzj z`;4g7i2sswk-rM~aZ6%AZ3jr>@}UZ}(Kx-x$b^kAuO)%M&^rR{hd*#qG*cfHNHFdg z-0BT%q(9HnKq zg-K5LD>)N+EAb3?-~^`#>2*x+s8hJr7NFFol9ZbR!^>m0{6$Kk6`_1&KmGF|?W zo^Pq=I_z`ISystd%AnQSmX9rz%JcT=PqS*fW(7oTlg=Y(R*b`yDdch70d|v_Ct1gY z`>EExCZYQL_mqj)yzb-CUOVK}k>1V*Qzcns*Lpis>*&%9ueOQ|RrRNHsz|p+*!%b_ z_n1%k&~p5?=^S*g@nVOX%KMwIYPs63WZwrD?y)P9Lol;-(vUD(27!B7DMq#kTk) zz1+!4RLF>j&45i9CXj;-q{X+Pp&v#R*}q9@Th=TMQbR%x## zP#N#IZx}Bm zvN^|{EKS2$H%(u}KFdX=1xDcpjS@rhiV^iqz?wTmW8fu~Ra z;2v361l*9z?ldWQTac=mPUXY~8$v0pNyYYkvK4)%M*4Wie|E)QkKHw zSaR<1HW(lp9+M)-^ov$PPo4*e0B`jwB@^gs2drx0;(76;VB@o33yP8*%Z9EK3gg23 zLmnW=o(~~lw$6u8lNpD*GnKtTJGOy5@hzl=*6`f!3c_mY;b!D}cvx0W2xl@Q?ZwCP zv^2G=1Chw=gP-aknIVY-+9yuxhbqUmZO;oq<|dQgf+WFc>y$Y58)Fy*(V^Vj9qk@7 zYgoU2{)U+fwACYvl9^4$bhxHRwV6J8)v2313V za)p4Szg_q5#qopP53v-rm+fYL2h?&meI|aLgU=e$Oyc!4nGOvd-b$dxdh})!>&uL&j z`DZi_eh*vs8)iWep3#B@>Aa*bj+wh8p5@;HJrnav2fm^M6bu4Hcl2*aC1N*%c8Vn# z8DOWP3Rj07s6D0st0Xhgt#gvQU8(FUR)MBE`L%8!IOjVhD2Uk=xS-Y2L zlRN?=>5AE7+FO=CKc*7KBSAsZkt<`>$&n+onO3Le@xp-kqj%K1D@o)>-AJ6d^pNPyzv4hxVNfN}&h88c| z+jM>fMMl2~};E9jX!2;*#R|A=o;AF>aSr;_AMb^RFfr7ChrjsM(;)47R$ z)-}aO4pN(!CB@mYp%tNUpyw&^IAhMe(12|69Gb6j zRiC4q9ge-~_SWb3M^$jMQQSx499A6+0cEU`B|f@23?W25eT@vtim{&hG1m3#SDGCM z=>=}iJi#oEwYha84~`4W^D9pH)jR(Nf^aVqUc6O`V9>ILL26ZP506RTzk%7>|AkAG z!~W~^q)W8(0V4$dMTsm|CimLK43S);JfGa&D7=9!g-cw1#D!0B|NkTDDj4EumLTpH z-1V>=?#|&FG=V^H3+}FmyIXK~C%9X1hXBFdEx7Y8-}?c#J2$gkT~$3Z9Wdk~a&8g_uKOtFptu~V zp2YwCN5a^(3;3Q7=W%28Am|=IkrYGM>{@|*`1Q#M)1Oi#@l8;!_-Jf zea#*yv3hs(=C^Q+9h#UDN`rKGR2>OT{H7q-^$_%{TaRk_Efrzs-A?%GQWgrg^V4J!S$o@F=gK5;>X!|O(`447kL-9Ik4`P~W?d?Q4?zqkr0z5m z2hoF8_=7!sobq*zvyVvAF<$i?W)15EC-HByaiOkgUtlOV z6nOQ!yrEmP_qdeU$9j*;r)yGD76p`6E>NDdyZQ9nA*q4d&-N1iLnbBtr#5LUsOC4S zCL7k|^AVp_f0BrC56?O+5qlZVk$&^SjM}f>`(4Zxx5Y*ekPX@ya7bD5Ts2nSM0~4*MV{8$=!%G7=%rqdaQwppy#pLga`N2L}i1(CFpzba%5?foD zTI#>>2lv(Vrc#0J>%nVMgIY$G)NU}Kg;v$d1WI`ns7RpEUhFG)=HJ2EHqNfccl3?w zed4i1(F`9;NzAHMzBRyEGqCXwWLE7-Bv%)PEu!?P5TkGAc$x-Clq41`;c^wZs3~Pm z7i^}-h)hzNT9kIl5gmt$bV7$n6OXTkT}up9X5}F(`|VC&32}PILN9H!?fEd)bu~0I zlOZbBgV)(B^ZJPmKJITd-iMFMZCodjNw2>gy!6sqGb;G!edP1%Wg++`Hv`sZgKLHb z!r%1LF8=Dlbp9)n$fdA9?O;KxppB2sq0*8B0EqecChXy|ujg&@bYhh3rdK*M&O-oO zQqO&2K(zTm-*Y_!qitM6LqyhOR2DjYEZ!*ZFFTo{fAtqooU7m*shsDM55`DMK>;-_ zV5Sb!jK!QGx+AOu9HMW|1A~WdTEU&kt5!4j%ftASLUv_?>4ar+IvuPu@2|&lxxXEH z0zK^N+3&%ZOBSuhTmt;l)oPbsT9CX44|R4BRUt=#d)|stSl2-TX9#r?YD0N3vols0 zJ#{_yJx)KDND z3I7R)O1C5G5f@+Nt*d-bJALcIt?87D#ojogKyIvO!=%Jqr#80q2nWIj$pImQp0;)s z!0hp0T#>+v=@(qFn6i?hH=#5_8q7%>rZlIfD-t0pD0kmwOS*?{z~Z{~GCL-W9F81D z-SoPba5VJ{+#HV0Y@t{-={3DLfc}J&Rq580bWfWjhf+Nr{-a;xErfr1fjl86<3^o; z;=y+w?Xr7FKLYZA99(Z&M41&n{ZiH%4_vrjREUF{kNjOy2h#`zz!ZjHo<@2>(cR!B zk$5zK9J2iO>YYTmd>>*NYxAF~efUo8_frI5#ZZjWO&+i~T$8N1P4T$7s{Xi? zu^>Xf9{$6hkJA@kEemgoPz~n(sLqk03M&}m6B2GYB?-m=Jr!3ml-(dbOl@kTXVa|c zx7M&;Z%3||TVyIyLNT<@3V+Vvnc#`>qJr8zFY@}XBZn*INpODetz-f41NcybOGZe_ zLgJJHn#oya<@5z%^q&`18i%yD+idT}&9d@|E_-Oq`775Uy$JE*A(-a#7{*Iy#djxo zv>Px8l#(DuD`tyr(bN$OZKLJCf|9ck#A8zTfX1F4hfyd<cEKun45=zL<|N_}Nec({K@?-Qm$0LqQW zdh*U$Jja%x?pJU9jntyk-&itPfZgytf3>QW8{>r4`idCt`)7wyypa@6yj{_} zgGGrhWvfmH`20)kUs|lu0j|UHDUZL_ny%+z)cTaT!%X{!vOg1dD92$vib#i~(!J8P zv?BIA)8fVIF4=ilBp+u#9W08|0o=Npo&gZK@jyByu1gbmwtM=2&D-gp8%lE;a3(CE)6euav_ zK))SJFjQ$bMFh{LUfKN?PevM|wqJKWNFv0gJA zStHcR3$s^#BXvz%=-Gp!huj|}ZYe`{cGl(#NBvOS2!&J1;@8Dltk6GE&;blDGK$ zFsqEdwh#|>K$q^3mNbxln?I{^QMK^ysnm&v`J3ESx*Bg+eaH$C39!RI2_nHn2z^ZC(rG^$m+kXc z;QVq!U~lr90J3z{2eEaY4eBY5B44HMS5D`JU5N^}_9-5bEW#8NG{Kv}oc%L7e`@=b z86bvxd`9h|Ai>DuR}FqlU&>b$a5YIaz$?~l!$0(+yOO}Z3|0cvj&JFbj+9>>WM@K{ zq*Bh@E=NPW(uzI1drxBwZ|H5$FG)o50vxGhr1R%4d!I%lOd@u#N!q#9Dyj^~cu?&! z{BfgO=+iYdDS-Ars?@Tl6nrfnN?h0M6BNss!Ux|Mt7YQGW%-o1(;^{`6du;DP)P8} z40_{+`r>7^)1pLrdyMTMaVo{yijq(8;k1#gc{5N9(R0TC%raRTLhhIBMdx3OhRJ!4 zJ%@^>Kg0)2BicToAm~CN^I$}~m>~=0t)Y^`RSih+634s_ryZ`07{m|%=Vag5`e}-9 z1`Gcn1?tIQ@LtlmuR5>grV@PLp8Co8>Tc#Hl{QLNUDhZ~2u90-gf^-jrJm^Lzg{zQUhLjq@P%yopikBwOeF1=El8 zUP8Ebp2V#XQ%pmA>(>`1Lc||RdeZjh$=6pK!2itB%?Zm2?>Har)}p|ghPh&H4HCZg zKXRA3s2$kk+4V&N>B@4}`vo7sgxQ+^RE-{RLw@3v@QLjsJU z;P&T-j&4n{*OU|*8xdQ1UTb|wY`xq=I?AE4(a{R5qAP-q?GP` z3bN`NB5B_q|FOf!VRXLY5y7uJuLiSB5(8ZGV)PYEpWKmnF zwW)HC>Kd$R`LE%smGB{htNAG(dQOFPFLT7Dh^dIVewy?s8Q(iu65z@S?EXLM zCJvi^K(K6NA0T7wz0ohJ2bnpYZs_F;-boW9ob~s>-hi~9x_1p~IMntK0eNkZ$czn! z`c#a+a9DcOVKzH`lMt8p$2zgPA!sV2fyl2wt% zO*YuB0P`9(^eo{F(BOi5pgRNe>V7Hl_`}>F65J5R(L9ki8llfyK|6 zphbPgS=1qRr)ZdETmj2A71kupkC0tDM%wm8^x(!w0{<@3#V+n{Ntf~=2Y$9x7>zQt z=0Jg`h+96Mjv#YXFZ&_x#J0wB55aR@-0a_wEJ&(}R{3Gi7y2(whm*_Gc8(3 z9c7Zqx(8Ekg1l!ZP8zM(g0mSShD=y+G4ciYC%cQHJB=rjWig&HUblm*(faElpCuc6 z9H)Gx#@S354Zac@AmsxF#G>QAHXH7u=e{GbXtZE(9|kHTpzwG5Jak$gin0gvbmeU5 zEErHuhd~yy*E~}G$1vB>qoIG+%Q_q;9kUx}2hX!*Z@QgR^+p_&i+}FH#jXc>j1%tL zr1k8GA_r74eatyX27)#Q@s~7sp4pMRkf+xVym9f@l zXgLEl?X6i1&%9YrDMnJ}`+kU~1d0%LEQbdpYdY@nsbJ;SCCv(_d42M+IFh`OujlS$ zqRXlt%Zx3*YHC%OF6u1d!iS^|0_oWZtezpSs>5>IWWN}1lM>pKrUp5!Ul={0weREr zI58-bjhqpd0x#z^GwD$ zHvH@^w=b%bg>(I@?L$OhPuEC$&DVXZsI^J+rZDCVYq0@7jBk7g3Nex7G4r zYZoK<&1M_#_M{TFoAd(?ySaZbJV^(Hb~pTRTXz-{_Ysc#MGrAYnlX9{c81_XyEt`x zvCTTGODZozNSD_gsP{G}$V44Ocv9~(x2X3B?vA>&wWGGqeQo~9<=|$7Y>ak*2#Q%` zlnmpF)$SSi*>DODd1T5rwS&SV&cH-ZL&-cgE~ZSasr7JQjEokd<; za6A12CDt-~{-6lYN%Rpu`lf$TTl>S0Y>26t^lhni_wlfeACiXjudVJx1L-|n@AXi)4RztoL& z#pQXT04D<<;t|076%cr!Ao2d*YBA&%qepVN(Bvj|GxVKWLVtm{b?Y$PsHpzKXPLuf z!*fI&TC$fx%M~;|V#r1c|Bdv;g!dh>QOU=`;TTE~h4uz^MjA6tJ}Z4yCC=!_zj^{q zHDddjgr3fMO$6J52UjZqr04$0(# zS%JmRX>pf@soQ9!G%p4kab|WC^^V{z%M) z44IuL=_l$f*&Oh!eeus8<56c(k;t1ZJD<0m-Dz=9+s~hXG2Uwb&(n0c#dgJp+nA{a zQgc36WNBl&8|^%-k1s;*#{dkFu}AUQ9-)R%)hkmtIu^LPMty_3VMq|Nn*#pQWh26J zy0fb4&LCP^Iw{O#1Q9JqR%|VEXELzx)pz9bHzR**nd?ik! zA(O(|8GA9%ZDF<5E1S~S8|#HV->%HiXD;q-I;vgSWun(I|93+Fj>*3S7yZH^R;WMB zrIw3KNi zMRaPO%H0uN6F-pAOJldeWnC)4;aTsG?}myrrtZq?rDN~+c0Mv&K?K?*@q02O7U9LG zfdKdtAM=jS3d&Lxi3@?x&daj3S?@OHKfH7bDBU@^KKb0*CkHf7L}jO0w@K~)izi{A zx;m+Ir)ZP4=;Psllo{R!(7X2= zhm@6VAyA`fh>W;p>Ac%h_DOT?(?-0#-|$rG!oEepA3xH-yDs zWy=P@FP$d;h|n}Klx@Z&AZYGV4F$Tv;WQkmKWO+-Bg=k$XVY?9qIYi*Oq)I^tE@M( zP`spg{mTUVEY7TLq6;qkUn=(}<_~&S0K!bOCod$0VtX*M)(L657v=a}p|-(&dK^N< z=lUD3C`yCQlOO*B#>dSXYFhqZt-S_sm8AGV{MvT@s4Yf7ro)WnQ|z8&%*Gc_Xrx+) zzKxJ)lJMCFD@O8}F4nxLj(YD8&PeJi(j_OfHMkHnW}S8wwYW9_Ps-$t%nH<=sSkgp zRq^omRzYt2I`tjJnT#g}Ui=5tO8Xl$7^|g@Tk)D?OX?&)MC2TT9ev+^+L|29?0fVl z;6!^Xuzfj;x>uy=iB(kH4A0&I704au#~^gwr$f8B2JnA&hw~qEWX}6^QG67uL1sa8H(QZO=2fpSUlvjQJ4yT3yMvsa(~s-=K&uAYxS5KO5RyXgBZP zH(UARLx;>pGV)s!QK0@XquVX|<)0jA{4?^w>92rAQS2nU4({QxxeH~{9-gmxom#cf zl`Ia?<5hizEWW{d0PRd(1B3LwjW>p<&+=%wojD&AcC>eMr!FLpu>4L{-*@Hdgukv# zXhz?khYBc#(p!Fri$ZAmZSkK4Tli#qhxwv`ANK5CNhbR@n zaZupRgDI5@_s1tZ@a3=hZadr9V6KbBv46(yegDPglGlCEko?9q4L#;lDTCY!;r>TW z>R&lM7I*mnDl&LqE<04cwTnd#3*7{06i&J=VvLp%4&=I@nG?SxmV7PLY38vZ32oQnehvM~yXaVwt zf=DzGpYf61u***Vz zU;TODP>vWVlD7ydVbkQvA${>;%K)u!*PX`cg^|*qG-KgdIB4Z#Rb--02fEL4(Azlv zzZ~vPW;IOasp7$#aGB?Oo!eo_!Z)q&5c`ejjZa4t?vv;4;aVKEKL>{4uX3GgaoC~y z&;(XG5G(73Q+XonCvQQy)FvHjAf>t3KR&Sjo-t=}-SX)nj(6P7@DRKU$<-lj zO>#;NmLEA4baIqFirb<8b$r%AE*bjMyXnPg7U@tU(>tW^2d}+i-{>SBa694*(QqM!aM#oM?6bT>{yN;mZDsz~>Ju#L|bMJ}!3W*j_So zO47f<8`lW!XU1KQ&^&xFHU2iAf#vjUOXnhE!-4R~ud`9Yf8FSOX{o#O8jshE6k5fe zw&{DDF&~M9cj-T`QP^`%L??DZZIXpQ?EpNl!ed*MGcbyY}Yb6v;wx@vUq z)henQ3B8eV%I2wz-|-GIy#FrGuYo;Z4`mRLj{>L1%C}%>n+#)I+$0mMO&_mJokQp( z=0T8_T#)VA{vOtS$!THDtrYVM)|67mGxj6hRwLrd~*_iE7s- zO&^)NVHn-p`~OeuMt<8wI?#N`iGkvx%cb&o4k6#Ny;A0#BwJnaMzRix3u13lZL{!H zvDSVd|9-WqS=$>EGcJ}ptH2oGI6h=Pw}1!Nv|*CuYIvJwKZYW6hvH6wTlk$`r1*I& zNrUc9#ou4z?@;{L)*7=C>G)XlZvwI3V8^uY)qg3mY&yxV-T6zolyDZ^FDA;mPkUV~ zz{F&mqZ>+$vWUYZ!yr-DeyZX|?ygD&wjKaw+hvG`4f>2u1!=L^!o5AK6lLFupU4O( z$ty%DKprZd@mC^bH#pw!TrAfif8Q9<-z2eRp7Z$zTe) z*+^XEb~lCC0CY1JL!f_;?s=c<0a~}#1I=_+B|b+3kFAtkl_I^3SgZKLS&EWF`=@AD zu4%Vco6nbC8)}5?obi0rTmWmOlB~#%_C7X)VQ;B4o)4GgEbf_7?B|NHhdz4AuC3F{ z!BI%bJ-~s8h~bX?+MmObA#Tf^wf0dPD|0j6*pGlK$05a{%bkER3B#prE%$~rL7~|w z_HG!iWqtT_nW=U>%p6HX-d?s9*FQ%)Je7Ji=#bkaPABIEY*tDXjfP`eoqlx zkjPTq+O<0_S3ZVlLCYeE(@B^dZ(=E3hHX8Px8Bj?GQ2{)WPm<`9zkUEE9ue${m zW{tkUgyfb4t37{}p@V0V_$?D^hvK^IfzRE0s`K7}6k!%NMxl6;nF1qtVtGNr^DC^C z{70#L*>bII+j##^Tz$;ft8CPZb5_M5%dIsrw5%GBFGS&Us$Zv}MI6vIU%4GO6 z5Mkpn@UQ136xskdcjy_rOKdxE`t~p0>fik#@ipU9t|MN)96899r}q&*oo%q8ENlWl zP%DlyR*;CbSE~mvy58c@YiL($!gLpxbaud)d3YF>;jQTC=~KbT$z6s64!y@$@7T!N z*^NCgMx#zMoYechM5CjPXZ%vCv1Tz3vQ><$(HzK|B%B*tP$m;uLi7-bE3`w-&4 z+E^FVtE2{N>t6-B>-q;Aqkat{Y1+6$d}J0cpD!mnT1J?+QGh|k7KfSk$yU0v_M72q z`YGp!gnf>kb*!uqE7erud=&(hOyO02So_wp&+-I=N>1DUYH9$BU7oB*#Y6dolj$#! zz`>?A`{wpt{g{#YGM`p`+|rHN!PlpA6zFO|(u~@OEB`yWM{0WcaoIYqhlj@kK^ErB zFHxLu&X1Y1xa49p%pzXd!gTwYjZp*b+653nx$1UNly#*jfWbowW-iYb#ko!9r z^*Wpdc-JCa6F@q?68Gi9W8ihHAPftMn69UU<0+0!igFgiJ$dX4X{bH1Xiac$;FQH> zoU;26N1*G@&+P5>iqg9%rq^o%aRnC*}~iuyj;mHK~3t}vME9E zrP-%DXBs%w=^|KG9TINUtlu~=mbDBH=*P_{AN_y>gurdu5qV4hRC25_+Bm^2WyMgI)xm3<-f|MVLf?5ZW!F~Wkh(lEyR z8E*CqwdxuNK{koM*4y6ztTS)3$Jci(Fe^a=ZU=&a^;y8kfPasZu2=Wf3||<#^UJ!% z<&8E3et%Nvt@z8MV8yL;Wq8Vyw{_oS5E(KxuTo$BRgH#q@Kyb&IZEgMdH8LM)Y2cg>XHj#GdS57j?1_K zOogMACkq9&*?X=-80Ma4Hp)8ae^W>+(kfTN<;n)yU)nr`?cWJZ1`iAIV5!-GaG$8(tt2*hIS@sEoCwBx zo{m;|wXC$>`nsPwuiLrm0z@dxNV~e>;SAlV8W3h(hCv;z82BJ~{4apKJxMEsOw3cW zuD5HT3g7Enw?E2{IZ@w|1suvz={uMX>Gk$1;8BJ|WgI)MSon?wk{%b8~kjyT>5wMHP$~;6wU(R J>Wu^V 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 UJtOQ#7XSbN07*qoM6N<$g6(jfg#Z8m literal 0 HcmV?d00001 diff --git a/backend/tester0.png b/backend/tester0.png new file mode 100644 index 0000000000000000000000000000000000000000..11482dcf4087f429a9598816f3023ca49a890c3f GIT binary patch literal 74270 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 J>Wu^V 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 UJtOQ#7XSbN07*qoM6N<$g6(jfg#Z8m literal 0 HcmV?d00001 diff --git a/frontend/src/index.html b/frontend/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/lib/app-create-store.js b/frontend/src/lib/app-create-store.js new file mode 100644 index 0000000..37c3215 --- /dev/null +++ b/frontend/src/lib/app-create-store.js @@ -0,0 +1,9 @@ +import reducer from '../reducer'; +import thunk from './redux-thunk.js'; +import reporter from './redux-reporter.js'; +import {createStore, applyMiddleware} from 'redux'; + +let appStoreCreate = () => + createStore(reducer, applyMiddleware(thunk, reporter)); + +export default appStoreCreate; diff --git a/frontend/src/lib/redux-reporter.js b/frontend/src/lib/redux-reporter.js new file mode 100644 index 0000000..0a347af --- /dev/null +++ b/frontend/src/lib/redux-reporter.js @@ -0,0 +1,15 @@ +let reporter = store => next => action => { + console.log('__ACTION__', action); + + try { + let result = next(action); + console.log('__STATE__', store.getState()); + return result; + } catch (error) { + error.action = action; + console.error('__ERROR__', error); + return error; + } +} + +export default reporter; diff --git a/frontend/src/lib/redux-thunk.js b/frontend/src/lib/redux-thunk.js new file mode 100644 index 0000000..1153e5c --- /dev/null +++ b/frontend/src/lib/redux-thunk.js @@ -0,0 +1,4 @@ +export default store => next => action => + typeof action === 'function' + ? action(store.dispatch, store.getState) + : next(action); diff --git a/frontend/src/lib/util.js b/frontend/src/lib/util.js new file mode 100644 index 0000000..3d4b5a2 --- /dev/null +++ b/frontend/src/lib/util.js @@ -0,0 +1,19 @@ +export const log = (...args) => + __DEBUG__ ? console.log(...args) : undefined; + +export const logError = (...args) => + __DEBUG__ ? console.error(...args) : undefined; + +export const renderIf = (test, component) => test ? component : undefined; + +export const classToggler = (options) => + Object.keys(options).filter(key => !!options[key]).join(' '); + +export const map = (list, ...args) => + Array.prototype.map.apply(list, args); + +export const filter = (list, ...args) => + Array.prototype.filter.apply(list, args); + +export const reduce = (list, ...args) => + Array.prototype.reduce.apply(list, args); diff --git a/frontend/src/main.js b/frontend/src/main.js new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/reducer/auth.js b/frontend/src/reducer/auth.js new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/reducer/index.js b/frontend/src/reducer/index.js new file mode 100644 index 0000000..e69de29 From c0e2feb27f3d198b8cec78eb4824eb4d93476837 Mon Sep 17 00:00:00 2001 From: Jamesbillard12 Date: Wed, 6 Sep 2017 13:51:44 -0700 Subject: [PATCH 03/10] added auth reducer --- frontend/src/reducer/auth.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/frontend/src/reducer/auth.js b/frontend/src/reducer/auth.js index e69de29..91104e9 100644 --- a/frontend/src/reducer/auth.js +++ b/frontend/src/reducer/auth.js @@ -0,0 +1,11 @@ +export default (state=null, action) => { + let {type, payload} = action; + switch (type) { + case 'TOKEN_SET': + return payload + case 'TOKEN_DELETE': + return null + default: + return state + } +} From 108d6522378a7589a384ecf641e7192c99707971 Mon Sep 17 00:00:00 2001 From: Jamesbillard12 Date: Wed, 6 Sep 2017 14:03:15 -0700 Subject: [PATCH 04/10] added auth actions --- frontend/src/action/auth-actions.js | 35 +++++++++++++++++++++++++++++ frontend/src/reducer/index.js | 6 +++++ 2 files changed, 41 insertions(+) create mode 100644 frontend/src/action/auth-actions.js diff --git a/frontend/src/action/auth-actions.js b/frontend/src/action/auth-actions.js new file mode 100644 index 0000000..8ff8e0c --- /dev/null +++ b/frontend/src/action/auth-actions.js @@ -0,0 +1,35 @@ +import superagent from 'superagent'; + +export const tokenSet = (token) => ({ + type: 'TOKEN_SET', + payload: token +}) + +export const tokenDelete = () => ({ + type: 'TOKEN_DELETE' +}) + +export const signupRequest = (user) => (dispatch) => { + return superagent.post(`${__API_URL__}/signup`) + .withCredentials() + .send(user) + .then( res => { + dispatch(tokenSet(res.text)); + try { + localStorage.token = res.text; + } catch (err) { + console.log(err); + } + return res; + }) +} + +export const loginRequest = (user) => (dispatch) => { + return superagent.get(`${__API_URL__}/login`) + .withCredentials() + .auth(user.username, user.password) + .then( res => { + dispatch(tokenSet(res.text)) + return res; + }) +} diff --git a/frontend/src/reducer/index.js b/frontend/src/reducer/index.js index e69de29..a096f45 100644 --- a/frontend/src/reducer/index.js +++ b/frontend/src/reducer/index.js @@ -0,0 +1,6 @@ +import {combineReducers} from 'redux'; +import auth from './auth.js'; + +export default combineReducers({ + auth, +}) From 4df56eb2926ef343f4d7286c6466500c3599d839 Mon Sep 17 00:00:00 2001 From: Jamesbillard12 Date: Wed, 6 Sep 2017 14:23:27 -0700 Subject: [PATCH 05/10] added component folder with sub folders --- frontend/src/component/auth-form/index.js | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 frontend/src/component/auth-form/index.js diff --git a/frontend/src/component/auth-form/index.js b/frontend/src/component/auth-form/index.js new file mode 100644 index 0000000..57813df --- /dev/null +++ b/frontend/src/component/auth-form/index.js @@ -0,0 +1,2 @@ +import React from 'react'; +import util from '../../lib/util.js' From 9dcc047a4839f0a4a383393c3cc50f49a865d8b2 Mon Sep 17 00:00:00 2001 From: Jamesbillard12 Date: Wed, 6 Sep 2017 14:45:32 -0700 Subject: [PATCH 06/10] added auth-form --- frontend/src/component/auth-form/index.js | 90 +++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/frontend/src/component/auth-form/index.js b/frontend/src/component/auth-form/index.js index 57813df..43545a5 100644 --- a/frontend/src/component/auth-form/index.js +++ b/frontend/src/component/auth-form/index.js @@ -1,2 +1,92 @@ import React from 'react'; import util from '../../lib/util.js' + +class AuthForm extends React.Component { + constructor(props) { + super(props); + + this.state = { + username: '', + email: '', + password: '', + usernameError: null, + emailError: null, + passwordError: null, + error: null, + } + + this.handleChange = this.handleChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + } + + handleChange(e) { + let {name, value} = e.target + + this.setState({ + [name]: value, + usernameError: name === 'username' && !value ? 'username required' : null, + emailError: name === 'email' && !value ? 'email required' : null, + passwordError: name === 'password' && !value ? 'password required' : null + }) + } + + handleSubmit(e) { + e.preventDefault(); + this.props.onComplete(this.state) + .then(() => { + this.setState({ username: '', email: '', password: ''}) + }) + .catch(error => { + console.error(error); + this.setState({error}) + }) + } + + render() { + return { +
+ + {util.renderIf(this.props.auth === signup, + + )} + + {util.renderIf(this.state.usernameError, + + {this.state.usernameError} + + )} + + + + {util.renderIf(this.state.passwordError, + + {this.state.passwordError} + + )} + + + + +
+ } + } +} + +export default AuthForm From e4106b5e347960ba151f82ca7b292573e0cb2a37 Mon Sep 17 00:00:00 2001 From: Jamesbillard12 Date: Wed, 6 Sep 2017 14:56:15 -0700 Subject: [PATCH 07/10] added landing-container component --- .../src/component/landing-container/index.js | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 frontend/src/component/landing-container/index.js diff --git a/frontend/src/component/landing-container/index.js b/frontend/src/component/landing-container/index.js new file mode 100644 index 0000000..ce4a55a --- /dev/null +++ b/frontend/src/component/landing-container/index.js @@ -0,0 +1,32 @@ +import React from 'react'; +import {connect} from 'react-redux'; +import AuthForm from '../auth-form'; +import * as util from '../../lib/util'; +import {signupRequest, loginRequest} from '../../action/auth-actions.js' + +class LandingContainer extends React.Component { + render() { + let params = this.props.match; + + let handleComplete = params.auth === 'login' + ? this.props.login + : this.props.signup + + return( +
+ +
+ ) + } +} + +let mapDispatchToProps = (dispatch) => { + return { + signup: (user) => dispatch(signupRequest(user)), + login: (user) => dispatch(loginRequest(user)) + } +} + +export default (undefined, mapDispatchToProps) (LandingContainer); From 33716c01dca5e78c0e706984e406b0cd5e910893 Mon Sep 17 00:00:00 2001 From: Jamesbillard12 Date: Wed, 6 Sep 2017 15:05:53 -0700 Subject: [PATCH 08/10] added app component --- frontend/src/component/app/index.js | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 frontend/src/component/app/index.js diff --git a/frontend/src/component/app/index.js b/frontend/src/component/app/index.js new file mode 100644 index 0000000..012407f --- /dev/null +++ b/frontend/src/component/app/index.js @@ -0,0 +1,34 @@ +import React from 'react'; +import {Provider} from 'react-redux'; +import {BrowserRouter, Route, Link} from 'react-router-dom'; +import appCreateStore from '../../lib/app-create-store.js'; +import LandingContainer from '../landing-container'; + +let store = appCreateStore(); + +class App extends react.Component { + render() { + return( +
+ + +
+
+

breweries and their beers

+ +
+ +
+
+
+
+ ) + } +} + +export default App From dea72b46a9de5fe5ef774b4616b3f4a3d299e072 Mon Sep 17 00:00:00 2001 From: Jamesbillard12 Date: Wed, 6 Sep 2017 15:09:52 -0700 Subject: [PATCH 09/10] added index.html file and main.js --- frontend/src/index.html | 10 ++++++++++ frontend/src/main.js | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/frontend/src/index.html b/frontend/src/index.html index e69de29..7930ad2 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -0,0 +1,10 @@ + + + + + breweries and their beers + + +
+ + diff --git a/frontend/src/main.js b/frontend/src/main.js index e69de29..95570de 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -0,0 +1,5 @@ +import React from 'react'; +import ReactDom from 'react-dom'; +import App from './component/app'; + +ReactDom.render(, document.getElementById('room')) From a00d92b7fbc4ec5752efbe9173e20e17bd9139ff Mon Sep 17 00:00:00 2001 From: Jamesbillard12 Date: Wed, 6 Sep 2017 17:04:52 -0700 Subject: [PATCH 10/10] decided to go with sluggram for backend tryingto figure out bug for switching between signup and login --- backend/.coveralls.yml | 2 - backend/.travis.yml | 14 - backend/README.md | 55 --- backend/lib/basic-auth-middleware.js | 36 -- backend/lib/bearer-auth-middleware.js | 35 -- backend/lib/error-middleware.js | 46 --- backend/model/beer.js | 17 - backend/model/brewery.js | 15 - backend/model/user.js | 75 ---- backend/package.json | 47 --- backend/route/auth-route.js | 40 --- backend/route/beer-route.js | 91 ----- backend/route/brewery-route.js | 55 --- backend/server.js | 31 -- backend/test/auth-route-test.js | 153 -------- backend/test/beer-route-test.js | 173 --------- backend/test/brewery-route-test.js | 331 ------------------ backend/tester.png | Bin 74270 -> 0 bytes backend/tester0.png | Bin 74270 -> 0 bytes frontend/src/action/auth-actions.js | 2 +- frontend/src/component/app/index.js | 14 +- frontend/src/component/auth-form/index.js | 29 +- .../src/component/landing-container/index.js | 4 +- frontend/src/main.js | 2 +- sluggram | 1 + 25 files changed, 26 insertions(+), 1242 deletions(-) delete mode 100644 backend/.coveralls.yml delete mode 100644 backend/.travis.yml delete mode 100644 backend/README.md delete mode 100644 backend/lib/basic-auth-middleware.js delete mode 100644 backend/lib/bearer-auth-middleware.js delete mode 100644 backend/lib/error-middleware.js delete mode 100644 backend/model/beer.js delete mode 100644 backend/model/brewery.js delete mode 100644 backend/model/user.js delete mode 100644 backend/package.json delete mode 100644 backend/route/auth-route.js delete mode 100644 backend/route/beer-route.js delete mode 100644 backend/route/brewery-route.js delete mode 100644 backend/server.js delete mode 100644 backend/test/auth-route-test.js delete mode 100644 backend/test/beer-route-test.js delete mode 100644 backend/test/brewery-route-test.js delete mode 100644 backend/tester.png delete mode 100644 backend/tester0.png create mode 160000 sluggram diff --git a/backend/.coveralls.yml b/backend/.coveralls.yml deleted file mode 100644 index c66a565..0000000 --- a/backend/.coveralls.yml +++ /dev/null @@ -1,2 +0,0 @@ -service_name: travis-ci -repo_token: 73yiaKsBCCnbKdzO3HTrw46Sv6NxnemUE diff --git a/backend/.travis.yml b/backend/.travis.yml deleted file mode 100644 index 2c1da3c..0000000 --- a/backend/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -language: node_js -os: - -osx -sudo: false -node_js: - - "node" -services: - - mongodb -install: - - npm install -before_script: - - sleep 15 -script: - - npm test diff --git a/backend/README.md b/backend/README.md deleted file mode 100644 index 01534c8..0000000 --- a/backend/README.md +++ /dev/null @@ -1,55 +0,0 @@ -![CF](https://camo.githubusercontent.com/70edab54bba80edb7493cad3135e9606781cbb6b/687474703a2f2f692e696d6775722e636f6d2f377635415363382e706e67) 18: Image Uploads w/ AWS S3 -=== - -## Submission Instructions - * fork this repository & create a new branch for your work - * write all of your code in a directory named `lab-` + `` **e.g.** `lab-susan` - * push to your repository - * submit a pull request to this repository - * submit a link to your PR in canvas - * write a question and observation on canvas - -## Learning Objectives -* students will be able to upload static assets to AWS S3 -* students will be able to retrieve a cdn url that contains the previously uploaded static asset -* students will be able to work with secret and public access keys - -## Requirements -#### Configuration -* `package.json` -* `.eslintrc` -* `.gitignore` -* `README.md` - -#### Description -* create an AWS account -* create an AWS Access Key and Secret - * add the Access Key and Secret to your `.env` file -* create a new model that represents a file type that you want to store on AWS S3 - * ex: `.mp3`, `.mp4`, `.png`, etc -* create a test that uploads one of these files to your route -* use the `aws-sdk` to assist with uploading -* use `multer` to parse the file upload request - -#### Server Endpoint -* `POST` - `/api/resource/:resourceID/new-resource` - -#### Tests -* `POST` - **200** - test that the upload worked and a resource object is returned - -#### Bonus -* `DELETE` route - `/api/resource/:resourceID/new-resource/:new-resourceID` -* Test: `DELETE` - **204** - test to ensure the object was deleted from s3 - -#### Bonus: 3pts -* try using the `deleteObject` method provided by the `aws-sdk` to delete an object *(file)* from S3 - * you will need to pass in a `params` object that contains the associated Bucket and AWS object key in order to delete the object from s3 - * ex: - ``` javascript - var params = { - Bucket: 's3-bucket-name', - Key: 'object-filename' - } - s3.deleteObject(params) - ``` -* don't forget to remove the resource from the DB diff --git a/backend/lib/basic-auth-middleware.js b/backend/lib/basic-auth-middleware.js deleted file mode 100644 index 97f95e6..0000000 --- a/backend/lib/basic-auth-middleware.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -const createError = require('http-errors'); -const debug = require('debug')('brewery:basic-auth-middleware'); - -module.exports = function(req, res, next) { - debug('basid auth'); - - var authHeader = req.headers.authorization; - if(!authHeader){ - return next(createError(401, 'authorization header required')); - } - - var base64str = authHeader.split('Basic ')[1]; - if(!base64str) { - return next(createError(401, 'username and password required')); - } - - var utf8str = new Buffer(base64str, 'base64').toString(); - var authArr = utf8str.split(':'); - - req.auth = { - username: authArr[0], - password: authArr[1] - }; - - if(!req.auth.username) { - return next(createError(401, 'username required')); - } - - if(!req.auth.password) { - return next(createError(401, 'password required')); - } - - next(); -}; diff --git a/backend/lib/bearer-auth-middleware.js b/backend/lib/bearer-auth-middleware.js deleted file mode 100644 index a8aa9f4..0000000 --- a/backend/lib/bearer-auth-middleware.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -const jwt = require('jsonwebtoken'); -const createError = require('http-errors'); -const debug = require('debug')('brewery:bearer-auth-middleware'); - -const User = require('../model/user.js'); - -module.exports = function(req, res, next) { - debug('bearer auth'); - - - var authHeader = req.headers.authorization; - if (!authHeader) { - return next(createError(401, 'authorization header required')); - } - - var token = authHeader.split('Bearer ')[1]; - if (!token) { - return next(createError(401, 'token required')); - } - - jwt.verify(token, process.env.APP_SECRET, (err, decoded) => { - if (err) return next(err); - - User.findOne({ findHash: decoded.token }) - .then( user => { - req.user = user; - next(); - }) - .catch( err => { - next(createError(401, err.message)); - }); - }); -}; diff --git a/backend/lib/error-middleware.js b/backend/lib/error-middleware.js deleted file mode 100644 index 26a1131..0000000 --- a/backend/lib/error-middleware.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -const createError = require('http-errors'); -const debug = require('debug')('brewery:error-middleware'); - -module.exports = function(err, req, res, next) { - debug('error-middleware'); - console.error('name: ', err.name); - console.error('msg: ', err.message); - - - if(err.name === 'CastError'){ - err = createError(404, err.message); - res.status(err.status).send(err.message); - next(); - return; - } - - if(err.name === 'ValidationError'){ - err = createError(400, err.message); - res.status(err.status).send(err.message); - next(); - return; - } - - if(err.name === 'Error'){ - err = createError(400, err.message); - res.status(err.status).send(err.message); - next(); - return; - } - - if(err.status) { - debug('user error'); - - res.status(err.status).send(err.name); - next(); - - return; - } - - debug('server error'); - err = createError(500, err.message); - res.status(err.status).send(err.name); - next(); -}; diff --git a/backend/model/beer.js b/backend/model/beer.js deleted file mode 100644 index e967dc7..0000000 --- a/backend/model/beer.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -const mongoose = require('mongoose'); -const Schema = mongoose.Schema; - -const beerSchema = Schema ({ - name: {type: String, required: true}, - style: {type: String, require: true}, - ibu: {type: String, required: true}, - userID: {type: Schema.Types.ObjectId, require: true}, - breweryID: {type: Schema.Types.ObjectId, required: true }, - imageURI: {type: String, required: true, unique: true}, - objectKey: {type: String, required: true, unique: true}, - created: {type: Date, default: Date.now} -}); - -module.exports = mongoose.model('beer', beerSchema); diff --git a/backend/model/brewery.js b/backend/model/brewery.js deleted file mode 100644 index fd79192..0000000 --- a/backend/model/brewery.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -const mongoose = require('mongoose'); -const Schema = mongoose.Schema; - -const brewerySchema = Schema({ - name: {type: String, required: true}, - address: {type: String, required: true}, - phoneNumber: {type: String, required: true}, - timestamp: {type: Date, required: true}, - userID: {type: Schema.Types.ObjectId, required: true}, - beers: [{type: Schema.Types.ObjectId, ref: 'beer'}] -}); - -module.exports = mongoose.model('brewery', brewerySchema); diff --git a/backend/model/user.js b/backend/model/user.js deleted file mode 100644 index a7feb03..0000000 --- a/backend/model/user.js +++ /dev/null @@ -1,75 +0,0 @@ -'use strict'; - -const crypto = require('crypto'); -const bcrypt = require('bcrypt'); -const jwt = require('jsonwebtoken'); -const mongoose = require('mongoose'); -const createError = require('http-errors'); -const Promise = require('bluebird'); -const debug = require('debug')('brewery:user'); - -const Schema = mongoose.Schema; - -const userSchema = Schema({ - username: {type: String, required: true, unique: true}, - email: {type: String, required: true, unique: true}, - password: {type: String, required: true}, - findHash: {type: String, unique: true} -}); - -userSchema.methods.generatePasswordHash = function(password) { - debug('generatePasswordHash'); - - return new Promise((resolve, reject) => { - bcrypt.hash(password, 10, (err, hash) => { - if(err) return reject(err); - this.password = hash; - resolve(this); - }); - }); -}; - -userSchema.methods.comparePasswordHash = function(password) { - debug('comparePasswordHash'); - - return new Promise((resolve, reject) => { - bcrypt.compare(password, this.password, (err, valid) => { - if(err) return reject(err); - if(!valid) return reject(createError(401, 'invalid password')); - resolve(this); - }); - }); -}; - -userSchema.methods.generateFindHash = function() { - debug('generateFindHash'); - - return new Promise((resolve, reject) => { - let tries = 0; - - _generateFindHash.call(this); - - function _generateFindHash() { - this.findHash = crypto.randomBytes(32).toString('hex'); - this.save() - .then( () => resolve(this.findHash)) - .catch( err => { - if(tries > 3) return reject(err); - tries++; - _generateFindHash.call(this); - }); - } - }); -}; - -userSchema.methods.generateToken = function() { - debug('generateToken'); - - return new Promise((resolve, reject) => { - this.generateFindHash() - .then( findHash => resolve(jwt.sign({token: findHash}, process.env.APP_SECRET))) - .catch(err => reject(err)); - }); -}; - -module.exports = mongoose.model('user', userSchema); diff --git a/backend/package.json b/backend/package.json deleted file mode 100644 index 940fde8..0000000 --- a/backend/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "18-aws-s3", - "version": "1.0.0", - "description": "![CF](https://camo.githubusercontent.com/70edab54bba80edb7493cad3135e9606781cbb6b/687474703a2f2f692e696d6775722e636f6d2f377635415363382e706e67) 18: Image Uploads w/ AWS S3 ===", - "main": "server.js", - "directories": { - "test": "test" - }, - "scripts": { - "test": "DEBUG='brewery*' istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js && rm -rf ./coverage", - "start": "DEBUG='brewery*' node server.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Jamesbillard12/18-aws-s3.git" - }, - "keywords": [], - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/Jamesbillard12/18-aws-s3/issues" - }, - "homepage": "https://github.com/Jamesbillard12/18-aws-s3#readme", - "dependencies": { - "aws-sdk": "^2.95.0", - "bcrypt": "^1.0.2", - "bluebird": "^3.5.0", - "body-parser": "^1.17.2", - "cors": "^2.8.4", - "debug": "^3.0.0", - "del": "^3.0.0", - "dotenv": "^4.0.0", - "express": "^4.15.4", - "http-errors": "^1.6.2", - "jsonwebtoken": "^7.4.2", - "mongoose": "^4.11.6", - "morgan": "^1.8.2", - "multer": "^1.3.0" - }, - "devDependencies": { - "chai": "^4.1.1", - "coveralls": "^2.13.1", - "istanbul": "^0.4.5", - "mocha": "^3.5.0", - "superagent": "^3.5.2" - } -} diff --git a/backend/route/auth-route.js b/backend/route/auth-route.js deleted file mode 100644 index 3520ec1..0000000 --- a/backend/route/auth-route.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -const jsonParser = require('body-parser').json(); -const debug = require('debug')('brewery:auth-route'); -const Router = require('express').Router; -const createError = require('http-errors'); -const basicAuth = require('../lib/basic-auth-middleware.js'); -const User = require('../model/user.js'); - -const authRouter = module.exports = Router(); - -authRouter.post('/api/signup', jsonParser, function (req, res, next) { - debug('POST: /api/signup'); - - let password = req.body.password; - delete req.body.password; - - let user = new User(req.body); - - user.generatePasswordHash(password) - .then( user => user.save()) - .then( user => user.generateToken()) - .then( token => res.send(token)) - .catch(next); -}); - -authRouter.get('/api/signin', basicAuth, function(req, res, next){ - debug('GET: /api/signin'); - - User.findOne({username: req.auth.username}) - .then( user => { - if(!user) { - return Promise.reject(createError(401, 'invalid username')); - } - return user.comparePasswordHash(req.auth.password); - }) - .then( user => user.generateToken()) - .then( token => res.send(token)) - .catch(next); -}); diff --git a/backend/route/beer-route.js b/backend/route/beer-route.js deleted file mode 100644 index 8bd2d4e..0000000 --- a/backend/route/beer-route.js +++ /dev/null @@ -1,91 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const del = require('del'); -const AWS = require('aws-sdk'); -const multer = require('multer'); -const Router = require('express').Router; -const createError = require('http-errors'); -const debug = require('debug')('brewery:beer-route'); - -const Beer = require('../model/beer.js'); -const Brewery = require('../model/brewery.js'); -const bearerAuth = require('../lib/bearer-auth-middleware.js'); - -AWS.config.setPromisesDependency(require('bluebird')); - -const s3 = new AWS.S3(); -const datadir = `${__dirname}/../data`; -const upload = multer({ dest: datadir }); - -const beerRouter = module.exports = Router(); - -function s3uploadProm(params) { - return new Promise((resolve, reject) => { - s3.upload(params, (err, s3data) => { - resolve(s3data); - }); - }); -} - -beerRouter.post('/api/brewery/:breweryID/beer', bearerAuth, upload.single('image'), function(req, res, next){ - debug('POST: /api/brewery/:breweryID/beer'); - - if(!req.file){ - return next(createError(400, 'file not found')); - } - - if(!req.file.path){ - return next(createError(400, 'file not saved')); - } - - let ext = path.extname(req.file.originalname); - - let params = { - ACL: 'public-read', - Bucket: process.env.AWS_BUCKET, - Key: `${req.file.filename}${ext}`, - Body: fs.createReadStream(req.file.path), - }; - - Brewery.findById(req.params.breweryID) - .then( () => s3uploadProm(params)) - .then( s3data => { - console.log('s3data', s3data); - del([`${datadir}/*`]); - let beerData = { - name: req.body.name, - style: req.body.style, - ibu: req.body.ibu, - objectKey: s3data.key, - imageURI: s3data.Location, - userID: req.user._id, - breweryID: req.params.breweryID, - }; - return new Beer(beerData).save(); - }) - .then( beer =>res.json(beer)) - .catch( err => next(err)); -}); - -beerRouter.delete('/api/brewery/:breweryID/beer/:beerID', bearerAuth, function(req, res, next){ - debug('DELETE: /api/brewery/:id'); - - - Beer.findById(req.params.beerID) - .then( beer => { - let params = { - Bucket: process.env.AWS_BUCKET, - Key: beer.objectKey - }; - s3.deleteObject(params, function(err, data) { - if(err)console.log(err); - else console.log(data); - Beer.findByIdAndRemove(req.params.id) - .then( () => res.status(204).send()) - .catch(next); - }); - }) - .catch(next); -}); diff --git a/backend/route/brewery-route.js b/backend/route/brewery-route.js deleted file mode 100644 index 891be39..0000000 --- a/backend/route/brewery-route.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -const Router = require('express').Router; -const jsonParser = require('body-parser').json(); -const debug = require('debug')('brewery:brewery-route'); - -const Brewery = require('../model/brewery.js'); -const bearerAuth = require('../lib/bearer-auth-middleware'); - -const breweryRouter = module.exports = new Router(); - -breweryRouter.post('/api/brewery', bearerAuth, jsonParser, function(req, res, next){ - debug('POST: /api/brewery'); - - req.body.timestamp = new Date(); - req.body.userID = req.user._id; - new Brewery(req.body).save() - .then( brewery => res.json(brewery)) - .catch(next); -}); - -breweryRouter.get('/api/brewery/:id', bearerAuth, function(req, res, next){ - debug('GET: /api/brewery'); - - Brewery.findById(req.params.id) - .populate('beers') - .then( brewery => res.json(brewery)) - .catch(next); -}); - -breweryRouter.put('/api/brewery/:id', bearerAuth, jsonParser, function(req, res, next){ - debug('PUT: /api/brewery/:id'); - - if(Object.keys(req.body).length === 0) { - Brewery.findById(req.params.id) - .then(brewery => { - res.status(400); - res.json(brewery); - }) - .catch(next); - return; - } - - Brewery.findByIdAndUpdate(req.params.id, req.body, {new: true}) - .then(brewery => res.json(brewery)) - .catch(next); -}); - -breweryRouter.delete('/api/brewery/:id', bearerAuth, function(req, res, next){ - debug('DELETE: /api/brewery/:id'); - - Brewery.findByIdAndRemove(req.params.id) - .then( () => res.status(204).send()) - .catch(next); -}); diff --git a/backend/server.js b/backend/server.js deleted file mode 100644 index e10744a..0000000 --- a/backend/server.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -const express = require('express'); -const debug = require('debug')('brewery:server'); -const dotenv = require('dotenv'); -const mongoose = require('mongoose'); -const morgan = require('morgan'); -const cors = require('cors'); - -const authRouter = require('./route/auth-route.js'); -const breweryRouter = require('./route/brewery-route.js'); -const beerRouter = require('./route/beer-route.js'); -const errors = require('./lib/error-middleware.js'); - -dotenv.load(); - -const app = express(); -const PORT = process.env.PORT || 3000; -mongoose.connect(process.env.MONGODB_URI); - -app.use(cors()); -app.use(morgan('dev')); - -app.use(authRouter); -app.use(breweryRouter); -app.use(beerRouter); -app.use(errors); - -app.listen(PORT, () => { - debug(`server on ${PORT}`); -}); diff --git a/backend/test/auth-route-test.js b/backend/test/auth-route-test.js deleted file mode 100644 index 603baf4..0000000 --- a/backend/test/auth-route-test.js +++ /dev/null @@ -1,153 +0,0 @@ -'use strict'; - -const expect = require('chai').expect; -const request = require('superagent'); -const User = require('../model/user.js'); - - - -const url = `http://localhost:${process.env.PORT}`; - -const exampleUser = { - username: 'exampleuser', - password: '1234', - email: 'exampleuser@test.com' -}; - -describe('Auth Routes', function() { - describe('POST: /api/signup', function() { - describe('with a valid body', function() { - after( done => { - User.remove({}) - .then(() => { - }) - .then( () => done()) - .catch(done); - }); - - it('should return a token', done => { - request.post(`${url}/api/signup`) - .send(exampleUser) - .end((err, res) => { - if (err) return done(err); - expect(res.status).to.equal(200); - expect(res.text).to.be.a('string'); - done(); - }); - }); - }); - }); - describe('POST: /api/signup', function() { - describe('with an invalid body', function() { - after( done => { - User.remove({}) - .then( () => done()) - .catch(done); - }); - - it('should return status 400', done => { - request.post(`${url}/api/signup`) - .send() - .end((err, res) => { - expect(res.status).to.equal(400); - done(); - }); - }); - }); - }); - - describe('GET: /api/signin', function() { - describe('with a valid body', function() { - before( done => { - let user = new User(exampleUser); - user.generatePasswordHash(exampleUser.password) - .then( user => user.save()) - .then( user => { - this.tempUser = user; - done(); - }); - }); - - after( done => { - User.remove({}) - .then( () => done()) - .catch(done); - }); - - it('should return a token 200', done => { - request.get(`${url}/api/signin`) - .auth('exampleuser', '1234') - .end((err, res) => { - expect(res.status).to.equal(200); - done(); - }); - }); - }); - }); - - describe('GET: /api/sign', function() { - describe('with a valid body but invalid path', function() { - it('should return status 404', done => { - request.get(`${url}/api/sign`) - .auth('exampleuser', '1234') - .end((err, res) => { - expect(res.status).to.equal(404); - done(); - }); - }); - }); - }); - - // Problem area - describe('cannot be authenticated', function() { - beforeEach( done => { - let user = new User(exampleUser); - - user.generatePasswordHash(exampleUser.password) - .then( user => user.save()) - .then( user => { - this.tempUser = user; - done(); - }) - .catch(done); - }); - - afterEach( done => { - User.remove({}) - .then( () => done()) - .catch(done); - }); - it('should return status 401 with no username', done => { - request.get(`${url}/api/signin`) - .auth('', '1234') - .end((err, res) => { - expect(res.status).to.equal(401); - done(); - }); - }); - it('should return status 401 with no password', done => { - request.get(`${url}/api/signin`) - .auth('exampleuser', '') - .end((err, res) => { - expect(res.status).to.equal(401); - done(); - }); - }); - it('msg should return invalid password', done => { - request.get(`${url}/api/signin`) - .auth('exampleuser', 'ABCDE') - .end((err, res) => { - expect(res.status).equal(401); - done(); - }); - }); - it('msg should return invalid username', done => { - request.get(`${url}/api/signin`) - .auth('dog', '1234') - .end((err, res) => { - expect(res.status).equal(401); - done(); - }); - }); - }); -}); diff --git a/backend/test/beer-route-test.js b/backend/test/beer-route-test.js deleted file mode 100644 index a0203f8..0000000 --- a/backend/test/beer-route-test.js +++ /dev/null @@ -1,173 +0,0 @@ -'use strict'; - -const expect = require('chai').expect; -const request = require('superagent'); - -const Beer = require('../model/beer.js'); -const User = require('../model/user.js'); -const Brewery = require('../model/brewery.js'); - -require('../server.js'); - -const url = `http://localhost:${process.env.PORT}`; - -const exampleUser = { - username: 'exampleuser', - password: '1234', - email: 'exampleuser@test.com' -}; - -const exampleBrewery = { - name: 'the brewery name', - address: 'the address', - phoneNumber: '555-555-5555', - timestamp: new Date() -}; - -const exampleBeer = { - name: 'test beer', - style: 'test style', - ibu: '45', - image: `${__dirname}/../tester.png` -}; - -const exampleBeer0 = { - name: 'test beer', - style: 'test style', - ibu: '45', - image: `${__dirname}/../tester0.png` -}; - -describe('beer routes', function() { - afterEach( done => { - Promise.all([ - Beer.remove({}), - Brewery.remove({}), - User.remove({}), - ]) - .then( () => done()) - .catch(done); - }); - - describe('POST: /api/brewery/:breweryID/beer', function() { - describe('with a valid token and valid data', function() { - before( done => { - new User(exampleUser) - .generatePasswordHash(exampleUser.password) - .then( user => user.save()) - .then( user => { - this.tempUser = user; - return user.generateToken(); - }) - .then( token => { - this.tempToken = token; - done(); - }) - .catch(done); - }); - - before( done => { - exampleBrewery.userID = this.tempUser._id.toString(); - new Brewery(exampleBrewery).save() - .then( brewery => { - this.tempBrewery = brewery; - done(); - }) - .catch(done); - }); - - after( done => { - delete exampleBrewery.userID; - done(); - }); - - it('should return a beer', done => { - request.post(`${url}/api/brewery/${this.tempBrewery._id}/beer`) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .field('name', exampleBeer.name) - .field('style', exampleBeer.style) - .field('ibu', exampleBeer.ibu) - .attach('image', exampleBeer.image) - .end((err, res) => { - if(err) return done(err); - expect(res.status).to.equal(200); - expect(res.body.name).to.equal(exampleBeer.name); - expect(res.body.style).to.equal(exampleBeer.style); - expect(res.body.ibu).to.equal(exampleBeer.ibu); - expect(res.body.breweryID).to.equal(this.tempBrewery._id.toString()); - done(); - }); - }); - }); - }); -}); - -describe('DELETE: /api/brewery/:breweryID/beer/:beerID', function() { - afterEach( done => { - Promise.all([ - Beer.remove({}), - Brewery.remove({}), - User.remove({}), - ]) - .then( () => done()) - .catch(done); - }); - describe('with a valid token and valid data and ID', function() { - before( done => { - new User(exampleUser) - .generatePasswordHash(exampleUser.password) - .then( user => user.save()) - .then( user => { - this.tempUser = user; - return user.generateToken(); - }) - .then( token => { - this.tempToken = token; - done(); - }) - .catch(done); - }); - - before( done => { - exampleBrewery.userID = this.tempUser._id.toString(); - new Brewery(exampleBrewery).save() - .then( brewery => { - this.tempBrewery = brewery; - done(); - }) - .catch(done); - }); - - after( done => { - delete exampleBrewery.userID; - done(); - }); - - it('should delete a beer', done => { - request.post(`${url}/api/brewery/${this.tempBrewery._id}/beer`) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .field('name', exampleBeer0.name) - .field('style', exampleBeer0.style) - .field('ibu', exampleBeer0.ibu) - .attach('image', exampleBeer0.image) - .then((res) => { - this.tempBeer = res.body; - return this.tempBeer; - }, done) - .then((beer) => { - request.delete(`${url}/api/brewery/${this.tempBrewery._id}/beer/${beer._id}`) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .then((res) => { - expect(res.status).to.equal(204); - done(); - }, done); - }); - }); - }); -}); diff --git a/backend/test/brewery-route-test.js b/backend/test/brewery-route-test.js deleted file mode 100644 index e872396..0000000 --- a/backend/test/brewery-route-test.js +++ /dev/null @@ -1,331 +0,0 @@ -'use strict'; -const expect = require('chai').expect; -const request = require('superagent'); -const Promise = require('bluebird'); - -const User = require('../model/user.js'); -const Brewery = require('../model/brewery.js'); -const Beer = require('../model/beer.js'); - -const url = `http://localhost:${process.env.PORT}`; - -const exampleUser = { - username: 'exampleuser', - password: '1234', - email: 'exampleuser@test.com' -}; - -let tempBrewery; - -const exampleBrewery = { - name: 'the brewery name', - address: 'the address', - phoneNumber: '555-555-5555', - timestamp: new Date() -}; - -const exampleBeer = { - name: 'test beer', - style: 'test style', - ibu: '45' -}; - -const newBrewery = { - name: 'new test brewery name', - address: 'new test address', - phoneNumber: '777-777-7777', -}; - -describe('Brewery Routes', function() { - afterEach( done => { - Promise.all([ - User.remove({}), - Brewery.remove({}), - Beer.remove({}) - ]) - .then( () => done()) - .catch(done); - }); - - describe('POST: /api/brewery', function() { - describe('POST with a valid req body',() => { - before( done => { - new User(exampleUser) - .generatePasswordHash(exampleUser.password) - .then( user => { - return user.save(); - }) - .then( user => { - this.tempUser = user; - return user.generateToken(); - }) - .then( token => { - this.tempToken = token; - done(); - }) - .catch(done); - }); - it('should return a brewery 200', done => { - request.post(`${url}/api/brewery`) - .send(exampleBrewery) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .end((err,res) => { - if(err) return done(err); - expect(res.status).to.equal(200); - expect(res.body.name).to.equal('the brewery name'); - expect(res.body.address).to.equal('the address'); - expect(res.body.phoneNumber).to.equal('555-555-5555'); - done(); - }); - }); - }); - describe('POST with an invalid request', () => { - before( done => { - new User(exampleUser) - .generatePasswordHash(exampleUser.password) - .then( user => { - return user.save(); - }) - .then( user => { - this.tempUser = user; - return user.generateToken(); - }) - .then( token => { - this.tempToken = token; - done(); - }) - .catch(done); - }); - it('should return 400', done => { - request.post(`${url}/api/brewery`) - .send() - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .end((err,res) => { - expect(res.status).to.equal(400); - done(); - }); - }); - }); - describe('POST without a token 401', () => { - before( done => { - new User(exampleUser) - .generatePasswordHash(exampleUser.password) - .then( user => { - return user.save(); - }) - .then( user => { - this.tempUser = user; - return user.generateToken(); - }) - .then( token => { - this.tempToken = token; - done(); - }) - .catch(done); - }); - it('should return 401', done => { - request.post(`${url}/api/brewery`) - .send() - .end((err,res) => { - expect(res.status).to.equal(401); - done(); - }); - }); - }); - }); - - describe('GET: /api/brewery/:id', () => { - before( done => { - new User(exampleUser) - .generatePasswordHash(exampleUser.password) - .then( user => { - return user.save(); - }) - .then( user => { - this.tempUser = user; - return user.generateToken(); - }) - .then( token => { - this.tempToken = token; - done(); - }) - .catch(done); - }); - - before( done => { - exampleBrewery.userID = this.tempUser._id.toString(); - new Brewery(exampleBrewery).save() - .then( brewery => { - this.tempBrewery = brewery; - done(); - }) - .catch(done); - }); - - it('GET should return a brewery 200', done => { - request.get(`${url}/api/brewery/${this.tempBrewery._id}`) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .end( (err, res) => { - if(err) return done(err); - expect(res.status).to.equal(200); - expect(res.body.name).to.equal('the brewery name'); - expect(res.body.address).to.equal('the address'); - expect(res.body.phoneNumber).to.equal('555-555-5555'); - done(); - }); - }); - describe('GET with an invalid request 404', () => { - it('should return 404', done => { - request.get(`${url}/api/brewery/1231231231241413212`) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .end( (err, res) => { - expect(res.status).to.equal(404); - done(); - }); - }); - describe('GET with no token should be 401', () => { - it('should return 401', done => { - request.get(`${url}/api/brewery/1231231231241413212`) - .end( (err, res) => { - expect(res.status).to.equal(401); - done(); - }); - }); - }); - - describe('testing PUT /api/brewery/:id', () => { - beforeEach( done => { - new User(exampleUser) - .generatePasswordHash(exampleUser.password) - .then( user => { - return user.save(); - }) - .then( user => { - this.tempUser = user; - return user.generateToken(); - }) - .then( token => { - this.tempToken = token; - done(); - }) - .catch(done); - }); - - beforeEach( done => { - exampleBrewery.userID = this.tempUser._id.toString(); - new Brewery(exampleBrewery).save() - .then( brewery => { - this.tempBrewery = brewery; - done(); - }) - .catch(done); - }); - - it('PUT should respond with a 200 status code and an updated brewery object.', () => { - return request.put(`${url}/api/brewery/${this.tempBrewery._id}`) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .send(newBrewery) - .then(res => { - expect(res.status).to.equal(200); - expect(res.body.name).to.equal('new test brewery name'); - expect(res.body.address).to.equal('new test address'); - expect(res.body.phoneNumber).to.equal('777-777-7777'); - tempBrewery = res.body; - }); - }); - it('PUT should respond with a 400 error code.', () => { - return request.post(`${url}/api/brewery`) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .send(tempBrewery) - .then((res) => { - tempBrewery = res.body; - return request.put(`${url}/api/brewery/${this.tempBrewery._id}`) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .send(null); - }) - .catch(err => { - expect(err.status).to.equal(400); - }); - }); - it('PUT should respond with a 404 error code if an ID is not found.', () => { - return request.put(`${url}/api/brewery/12345`) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .catch(err => { - expect(err.status).to.equal(404); - }); - }); - it('PUT should respond with a 401 if no token was sent', () => { - return request.put(`${url}/api/brewery/12345`) - .catch(err => { - expect(err.status).to.equal(401); - }); - }); - }); - }); - }); -}); - -describe('DELETE: /api/brewery/:id', () => { - before( done => { - new User(exampleUser) - .generatePasswordHash(exampleUser.password) - .then( user => { - return user.save(); - }) - .then( user => { - this.tempUser = user; - return user.generateToken(); - }) - .then( token => { - this.tempToken = token; - done(); - }) - .catch(done); - }); - - before( done => { - exampleBrewery.userID = this.tempUser._id.toString(); - new Brewery(exampleBrewery).save() - .then( brewery => { - this.tempBrewery = brewery; - done(); - }) - .catch(done); - }); - - after( done => { - Promise.all([ - User.remove({}), - ]) - .then( () => done()) - .catch(done); - }); - - it('DELETE should delete a brewery 204', done => { - request.delete(`${url}/api/brewery/${this.tempBrewery._id}`) - .set({ - Authorization: `Bearer ${this.tempToken}` - }) - .end( (err, res) => { - if(err) return done(err); - expect(res.status).to.equal(204); - done(); - }); - }); -}); diff --git a/backend/tester.png b/backend/tester.png deleted file mode 100644 index 11482dcf4087f429a9598816f3023ca49a890c3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74270 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 J>Wu^V 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 UJtOQ#7XSbN07*qoM6N<$g6(jfg#Z8m diff --git a/backend/tester0.png b/backend/tester0.png deleted file mode 100644 index 11482dcf4087f429a9598816f3023ca49a890c3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74270 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 J>Wu^V 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 UJtOQ#7XSbN07*qoM6N<$g6(jfg#Z8m diff --git a/frontend/src/action/auth-actions.js b/frontend/src/action/auth-actions.js index 8ff8e0c..6b9dc99 100644 --- a/frontend/src/action/auth-actions.js +++ b/frontend/src/action/auth-actions.js @@ -28,7 +28,7 @@ export const loginRequest = (user) => (dispatch) => { return superagent.get(`${__API_URL__}/login`) .withCredentials() .auth(user.username, user.password) - .then( res => { + .then(res => { dispatch(tokenSet(res.text)) return res; }) diff --git a/frontend/src/component/app/index.js b/frontend/src/component/app/index.js index 012407f..81ae990 100644 --- a/frontend/src/component/app/index.js +++ b/frontend/src/component/app/index.js @@ -6,23 +6,23 @@ import LandingContainer from '../landing-container'; let store = appCreateStore(); -class App extends react.Component { +class App extends React.Component { render() { return( -
+
-

breweries and their beers

+

cfgram

- +
@@ -31,4 +31,4 @@ class App extends react.Component { } } -export default App +export default App; diff --git a/frontend/src/component/auth-form/index.js b/frontend/src/component/auth-form/index.js index 43545a5..8e7433a 100644 --- a/frontend/src/component/auth-form/index.js +++ b/frontend/src/component/auth-form/index.js @@ -1,18 +1,17 @@ import React from 'react'; -import util from '../../lib/util.js' +import * as util from '../../lib/util.js'; class AuthForm extends React.Component { constructor(props) { super(props); - this.state = { username: '', email: '', password: '', usernameError: null, - emailError: null, passwordError: null, - error: null, + emailError: null, + error: null } this.handleChange = this.handleChange.bind(this); @@ -20,7 +19,7 @@ class AuthForm extends React.Component { } handleChange(e) { - let {name, value} = e.target + let {name, value} = e.target; this.setState({ [name]: value, @@ -38,24 +37,24 @@ class AuthForm extends React.Component { }) .catch(error => { console.error(error); - this.setState({error}) + this.setState({error}); }) } render() { - return { + return (
- {util.renderIf(this.props.auth === signup, + {util.renderIf(this.props.auth === 'signup', - )} + onChange={this.handleChange} /> + )} {util.renderIf(this.state.usernameError, @@ -66,7 +65,7 @@ class AuthForm extends React.Component { @@ -79,14 +78,14 @@ class AuthForm extends React.Component { - } + ) } } -export default AuthForm +export default AuthForm; diff --git a/frontend/src/component/landing-container/index.js b/frontend/src/component/landing-container/index.js index ce4a55a..ca599f0 100644 --- a/frontend/src/component/landing-container/index.js +++ b/frontend/src/component/landing-container/index.js @@ -6,7 +6,7 @@ import {signupRequest, loginRequest} from '../../action/auth-actions.js' class LandingContainer extends React.Component { render() { - let params = this.props.match; + let {params} = this.props.match; let handleComplete = params.auth === 'login' ? this.props.login @@ -29,4 +29,4 @@ let mapDispatchToProps = (dispatch) => { } } -export default (undefined, mapDispatchToProps) (LandingContainer); +export default connect(undefined, mapDispatchToProps) (LandingContainer); diff --git a/frontend/src/main.js b/frontend/src/main.js index 95570de..85be90a 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -2,4 +2,4 @@ import React from 'react'; import ReactDom from 'react-dom'; import App from './component/app'; -ReactDom.render(, document.getElementById('room')) +ReactDom.render(, document.getElementById('root')) diff --git a/sluggram b/sluggram new file mode 160000 index 0000000..1fc6e99 --- /dev/null +++ b/sluggram @@ -0,0 +1 @@ +Subproject commit 1fc6e992ae12d84d6e3f8dfc67a18c9f2eca29ad