In public video surveillance, there is an inherent conflict between public safety goals and privacy needs of citizens. Generally, societies tend to decide on middleground solutions that sacrifice neither safety nor privacy goals completely. Watchyourfac.es is a prototype that leverages the inherent geo-distribution of fog computing to preserve privacy of citizens while still supporting camera-based digital manhunts of law enforcement agencies.
If you use this software in a publication, please cite it as:
Martin Grambow, Jonathan Hasenburg, David Bermbach. Public Video Surveillance: Using the Fog to Increase Privacy. In: Proceedings of the 5th Workshop on Middleware and Applications for the Internet of Things (M4IoT 2018). ACM 2018.
@inproceedings{grambow_public_2018,
location = {Rennes, France},
title = {Public Video Surveillance: Using the Fog to Increase Privacy},
booktitle = {Proceedings of the 5th Workshop on Middleware and Applications for the Internet of Things (M4IoT 2018)},
publisher = {{ACM}},
author = {Grambow, Martin and Hasenburg, Jonathan and Bermbach, David},
year = {2018},
langid = {english}
}
A full list of our publications and prototypes is available on our group website.
See this documentation and scientific paper for further information
Bibtex entry for the paper:
Prerequisites:
- yarn https://yarnpkg.com/en/docs/install
- node (version 10.6.0)
- serverless (version 1.27.3)
If you have a different node version (run node --version
to find out), install [email protected] using npm install -g [email protected]
. Otherwise install this version from your favorite package manager.
Install [email protected] (to do this, [email protected] is needed or the installation will fail). Run npm install -g [email protected]
. If this doesn't work, try node --version
to check if you have the correct node version (v10.6.0). Also run serverless --version
to check that your serverless version is correct.
Installation Process: The very first deploy will take around 40 minutes until everything is up and working so keep that in mind (the local process is about 10 minutes long, the rest takes place on aws)
- Make all scripts in
scripts/
executable (egchmod +x scripts/setup.sh
,chmod +x scripts/deploy.sh
,chmod +x scripts/remove.sh
) - Run
yarn setup
to install all dependencies and build the frontend a first time to deploy it later - If that has not happened: Add yarn bin folder to PATH in order to run serverless
PATH="$PATH:~/.config/yarn/global/node_modules/.bin"
- Setup aws credentials
serverless config credentials --provider aws --key AKABLABLABLA --secret SECRETSECRETSECRET
(check the credentials slack channel) - Make Auth0 API secret available as env variable:
export AUTH0_USER_API_SECRET=SECRETSECRETSECRETSECRET
- Run
yarn deploy <prefix>
where<prefix>
is your personal dev environment name and the prefix of your git branches (long prefix may cause some deployment issues so keep it short, i.e. 2-3 letters) ->yarn deploy pw
This will install all dependencies, build the frontend and deploy everything to aws in your own environment which will be available with the next urls:
- Frontend:
prefix.watchyourfac.es
- APIs:
prefix.api.watchyourfac.es/api/
For manual installation just execute all commands from scripts/setup
and then scripts/deploy
.
To run and test everything offline use the scripts/offline
script with your prefix e.g. ./scripts/offline.sh pw
.
This will for now setup a local dynamodb instance running on :8080, api on :4000.
To run the local frontend just call yarn dev
from the frontend
directory. The HTTP endpoint will run on :3000.
Note that valid Auth0 credentials are still required for access.
TravisCI is configured to deploy to a specific stage when a push is made to the repo. The stage name is based on the branchname, keep your branch-naming consistent.
Naming Strategy: <prefix>/<branch-name>
(eg. pw/setup-ci
)
Right now TravisCI only deploys but does not remove or cleanup, to do that use the following commands:
- To Remove everything run the
.travis/local-remove.sh
script (chmod +x might be needed) - Update Frontend (after building locally):
sls s3sync --stage=pw
(pw
is your stage name / prefix)
Always include the --stage=xyz
affix with your specific name!
- Remove everything and stop all services: serverless deploy
serverless remove
- Deploy only a specific function with name
getThis
serverless deploy function -f getThis
- Invoke a specific function with name
getThis
serverless invoke -f getThis -l
For everthing else please check the serverless docs!
See this link
See this link
See this link
See this link
See this link
The master
branch is protected and only approved pull requests can push to it. Most important part of
the workflow is rebase
, heres a refresher on merging vs rebasing https://www.atlassian.com/git/tutorials/merging-vs-rebasing.
How do I push changes to the master
branch?
- Switch to
master
->git checkout master
- Update
master
->git pull --rebase
(ALWAYS userebase
when pulling!!!) - Create new branch from
master
->git checkout -b pw/new-feature
(where 'pw/' is your own name/abbreviation) - Work on branch and push changes
- Rebase master onto branch to not have merge conflicts later ->
git pull origin master --rebase
(AGAIN use--rebase
) - Push branch again, this time force push to include rebased master (
git push --force
) - Create a pull request from github.com
- Get pull request reviewed and merge it into master
Some last words, keep pull requests small (not 100 files changed etc :D), so they are easier to review and rather create a lot of pull requests than one big