Requirements for this project are localy installed Golang and mongodb. You should create database with any name and create one user with read/write permisions. (Later in examples I used database called symphonyGopher and user with credentials user:password on port 27017)
Application configuration is stored in environment variables.
Example script to configure environment (added to $HOME/.bash_profile):
-
Go variables
export GOPATH="/Users/stefanilijevski/go"
export GOBIN="/Users/stefanilijevski/go/bin"
-
SympohonyGopher variables
export SG_DB="mongodb://user:password@localhost:27017/symphonyGopher"
export SG_PORT=8082
Application uses vendoring, and govendor tool to manage dependencies. Dependencies are kept into vendor/ folder, aren't version controlled. Folders under vendor/ folder are ignored.
- Install govendor tool
go get -u github.com/kardianos/govendor
- Run
govendor get github.com/IlijevskiSymphony/symphonyGopher
- Run
govendor sync
in project folder - To install project, run
go install
- Change directory to bin:
cd $GOPATH/bin
- Run application server with
./symphonyGopher
Server endpoints and their purpose:
-
'/register' (POST) Used for registration of new user, expects next form data parameters in JSON format. { "email":"random123@gmail.com", "password": "Ilijevski1234" }
-
'/signup/accept/{reference uuid}' (GET) Used to confirm registration and should be sent by email. Reference uuid is stored in registrations document and is referenced to user by 'partnerID'
-
'/login' (GET) Used to check if there is current session active. Session is stored in cookie.
-
'/login' (POST) Used to login to server and create new session, expects next form data parameters in JSON format. { "email":"random123@gmail.com", "password": "Ilijevski1234" }
-
'/logout' (GET) Used to terminate user session
-
'/addLink' (POST) Add link with tags to repository for logged in user, expects next form data parameters in JSON format. { "link":"www.symphony.is", "tags": [ "da", "ud" ] }
-
'/verification/resend' (POST) Resends verification email for registrated credentials, expects next form data parameters in JSON format. { "email":"random123@gmail.com" }
-
'/resetPasswordEmail' (POST) Sends an email with reference to user to reset password, expects next form data parameters in JSON format. { "email":"random123@gmail.com" }
-
'/resetPasswordCheck/{reference}' (GET) Checks if reference used from reset password email is valid
-
'/resetPassword' (POST) Resets password for user that used link from the email, expects next form data parameters in JSON format. { "password":"newPassword123" "id":"e1955c74-8211-43fb-a1d1-b43e24ef6d1e" }