Skip to content

AluBhorta/goth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

24 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

goth

A tiny go auth micro-framework, with support for JWT access and refresh tokens. ๐Ÿ”

Available HTTP APIs

auth endpoints:

  • POST /api/v1/auth/signup : signup
  • POST /api/v1/auth/login : login
  • POST /api/v1/auth/logout : logout
  • POST /api/v1/auth/refresh : refresh tokens
  • POST /api/v1/auth/reset/init : init password reset
  • POST /api/v1/auth/reset/verify : verify password reset
  • DELETE /api/v1/auth/delete : ๐Ÿ›ก delete account

user endpoints:

  • GET /api/v1/user : ๐Ÿ›ก get user info
  • PUT /api/v1/user : ๐Ÿ›ก update user info

๐Ÿ›ก: protected route i.e. requires valid bearer token Authorization header

Getting started

requirements

  • golang 1.17+
  • docker 20.10+
  • docker compose v2+

setting up env

and a .env with the following contents:

GOTH_LISTEN_HOST=0.0.0.0
GOTH_LISTEN_PORT=3333

REDIS_HOST=localhost
REDIS_PORT=6379

DB_HOST=localhost
DB_PORT=27017
DB_NAME=gothDb
DB_USER=root
DB_PASSWORD=secret

ACCESS_TOKEN_MAX_AGE_IN_SECONDS=3600
REFRESH_TOKEN_MAX_AGE_IN_SECONDS=1296000
ACCESS_TOKEN_SIGNING_KEY=your-access-signing-key
REFRESH_TOKEN_SIGNING_KEY=your-refresh-signing-key

SENDGRID_API_KEY=your-sendgrid-api-key
FROM_EMAIL_ADDRESS=verified-sendgrid-sender@example.com

copy the same file and name that .prod.env, with these two variables updated:

REDIS_HOST=redis
DB_HOST=mongodb

add a .mongo.env with the following contents:

MONGO_INITDB_DATABASE=gothDb
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=secret

NOTE:

  • update the DB_PASSWORD (& MONGO_INITDB_ROOT_PASSWORD), ACCESS_TOKEN_SIGNING_KEY and REFRESH_TOKEN_SIGNING_KEY to something more secure
  • when db credentials are updated, make sure you sync them across all the *.env files
  • to be able to send emails for password reset successfully, you need to

Usage in Docker

to spin up the whole project, just run:

docker compose up -d

it might take a few minutes to download and build the images the first time. grab a cup of tea perhaps... โ˜•๏ธ

to bring down the project, run:

docker compose down

add -v after down if you also want to remove the volumes associated with mongodb and redis.

to rebuild the image after you've made any changes to the code, run:

docker compose build

and then run using up -d as usual to run the project.

Usage in Development

to run the goth project directly on your terminal using go and not using docker, you need to run mongodb and redis locally.

that can be done very easily with docker:

docker compose up -d mongodb redis

then, to run the project, from the root execute:

go run .

License

MIT.