{"id":34548273,"url":"https://github.com/overlorddamygod/go-auth","last_synced_at":"2026-06-01T11:31:32.617Z","repository":{"id":39797927,"uuid":"451371140","full_name":"overlorddamygod/go-auth","owner":"overlorddamygod","description":"Authentication API with Golang, JWT, PostgreSQL","archived":false,"fork":false,"pushed_at":"2023-10-02T13:59:24.000Z","size":101,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-06-21T09:57:31.754Z","etag":null,"topics":["api","authentication","golang"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/overlorddamygod.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-24T08:05:39.000Z","updated_at":"2022-05-19T10:43:43.000Z","dependencies_parsed_at":"2023-10-02T17:16:37.900Z","dependency_job_id":null,"html_url":"https://github.com/overlorddamygod/go-auth","commit_stats":{"total_commits":31,"total_committers":1,"mean_commits":31.0,"dds":0.0,"last_synced_commit":"6a9cae99e7454a26ed54bd9333f438a69b2ba5b1"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/overlorddamygod/go-auth","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overlorddamygod%2Fgo-auth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overlorddamygod%2Fgo-auth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overlorddamygod%2Fgo-auth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overlorddamygod%2Fgo-auth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/overlorddamygod","download_url":"https://codeload.github.com/overlorddamygod/go-auth/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/overlorddamygod%2Fgo-auth/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33773771,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","authentication","golang"],"created_at":"2025-12-24T07:38:08.460Z","updated_at":"2026-06-01T11:31:32.611Z","avatar_url":"https://github.com/overlorddamygod.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Go Authentication Server\n\nSimple authentication api written in go inspired by [gotrue](https://github.com/netlify/gotrue)\n\n**Supports email and password login, magic link, oauth**\n\n#### Requirements\n- [Golang](https://go.dev/)\n\n#### Libraries\n- [Gin](https://gin-gonic.com) - Go Web Framework\n- [GORM](https://gorm.io) - ORM library\n- [Uber-Fx](https://github.com/uber-go/fx) - Dependency Injection Framework\n- [Simple-Mail](https://github.com/xhit/go-simple-mail) - Mail Client\n\n### Usage :\nCopy `sample.env` file as `.env` in the root directory and edit all the values.\n___\n\n### **Debug build**\n\nRuns server without building\n``` console\nuser@main:~$ go run cmd/main.go\n```\nBuild and run server\n``` console\nuser@main:~$ go build cmd/main.go\nuser@main:~$ ./main\n```\n___\n#### Release build\n``` console\nuser@main:~$ go build cmd/main.go\nuser@main:~$ GIN_MODE=release ./main\n```\nAfter running the commands, Authentication server runs on port `8080`\n___\n### **Test API**\n```console\nuser@main:~$ make test\n```\n`or`\n```console\nuser@main:~$ go test ./...\n```\n## API Endpoints\n---\n* [/api/v1/auth](#sign-up-new-user)\n    * [/signup](#sign-up-new-user) Sign Up New User\n    * [/confirm](#confirm-user-mail) \n\n    * [/signin](#sign-in-user) Sign in User (email or magiclink)\n    * [/oauth](#sign-in-with-oauth) Sign in with oauth\n    * [/refresh](#refresh-user-token) Refresh user Token\n    * [/verify](#verify-magic-link-login) Verify Magic Link Login\n    * [/request-reset-password](#send-password-reset-request) Send password reset request\n    * [/reset-password](#reset-password) Reset Password\n\n    * [/signout](#sign-out-user) Sign out User\n\n    * [/me](#get-user-data) Get Logged in User Data\n\n    * [/admin](#get-all-users) Admin Endpoints\n        * [/users](#get-all-users) Get all Users\n        * [/user](#get-user-by-email) Get User By Email\n        * [/user](#delete-user) Delete user\n\n        * [/role](#create-role) Roles Endpoints\n            * [/create](#create-role) Create Role\n            * [/add](#add-role-to-user) Add role to user\n            * [/remove](#remove-role-from-userr) Remove role from user\n            * [/delete](#delete-role) Delete A Role\n\n## Sign up new user\n#### POST /api/v1/auth/signup\n\n**Parameters**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `name` | required | string |\n|     `email` | required | string  |\n|     `password` | required | string  |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"message\": \"account created\"\n}\n```\n---\n## Sign in user\n#### POST /api/v1/auth/signin\n\n**Query**\n|          Name | Required |  Type   | Description|\n| -------------:|:--------:|:-------:| ----------:|\n|     `type` | required | string | email or magiclink |\n|     `redirect_to` | required | string  | redirect url |\n\n**Parameters**\n\n|          Name | Required |  Type   | Description|\n| -------------:|:--------:|:-------:| ----------:|\n|     `email` | required | string  | email|\n|     `password` | optional | string  | required if login type is email |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"access_token\": \"JWT\",\n    \"refresh_token\": \"JWT\",\n}\n```\n---\n## Sign in With Oauth\n#### GET /api/v1/auth/oauth\n\n**Query**\n|          Name | Required |  Type   | Description|\n| -------------:|:--------:|:-------:| ----------:|\n|     `oauth_provider` | required | string | github |\n|     `redirect_to` | required | string  | redirect url |\n\n`Redirects to redirect url with access_token and refresh_token`\n\n---\n## Get user data\n#### POST /api/v1/auth/me\n\n**Headers**\n|          Name | Required |  Type   | Description|\n| -------------:|:--------:|:-------:| ----------:|\n|     `X-Access-Token` | required | string | access token |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"user\": {\n        \"id\": \"0c57528e-4d4f-4737-b6e9-da1f251ce8b7\",\n        \"name\": \"My Name\",\n        \"email\": \"email123@gmail.com\"\n    }\n}\n```\n---\n## Refresh user token\n#### POST /api/v1/auth/refresh\n\n**Headers**\n|          Name | Required |  Type   | Description|\n| -------------:|:--------:|:-------:| ----------:|\n|     `X-Refresh-Token` | required | string | refresh token |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"access_token\": \"JWT\"\n}\n```\n---\n## Verify magic link login\n#### GET /api/v1/auth/verify\n#### POST /api/v1/auth/verify\n\n**Query**\n|          Name | Required |  Type   | Description|\n| -------------:|:--------:|:-------:| ----------:|\n|     `type` | required | string | type of verification ( magiclink ) |\n|     `token` | required | string | token |\n|     `redirect_to` | required | string | redirect url |\n\n**Response**\n\n- Redirects to `redirect_url` with `access_token` and `refresh_token` as query.\nExample: http://localhost:3000?access_token=JWT\u0026refresh_toke=JWT\n---\n## Sign out user\n#### POST /api/v1/auth/signout\n\n**Headers**\n|          Name | Required |  Type   | Description|\n| -------------:|:--------:|:-------:| ----------:|\n|     `X-Refresh-Token` | required | string | refresh token |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"message\": \"successfully signed out\"\n}\n```\n---\n## Send password reset request\n#### POST /api/v1/auth/request-password-reset\n\n**Parameters**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `email` | required | string  |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"message\": \"password recovery email sent\"\n}\n```\n---\n## Reset password\n#### POST /api/v1/auth/reset-password\n\n**Query**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `token` | required | string  |\n\n**Parameters**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `password` | required | string  |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"message\": \"password reset successfully\"\n}\n```\n---\n## Confirm user mail\n#### GET /api/v1/auth/confirm\n#### POST /api/v1/auth/confirm\n\n**Query**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `token` | required | string  |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"message\": \"user mail confirmed\"\n}\n```\n---\n---\n# Admin\n## Get All Users\n#### GET /api/v1/auth/admin/users\n\n**Headers**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `x-api-token` | require | string  |\n\n**Query**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `page` | optional, default 1 | int  |\n|     `limit` | optional, default 10 | int  |\n\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"limit\": 10,\n    \"page\": 1,\n    \"totalPage\": 1,\n    \"users\": [{\n        \"id\": \"d2f25e7e-0e5d-49cd-b791-4d8fcabeb073\",\n        \"Name\": \"Ram\",\n        \"Email\": \"ram@gmail.com\",\n    }]\n}\n```\n---\n## Get User By Email\n#### DELETE /api/v1/auth/admin/user?email=sad@gmail.com\n\n**Headers**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `x-api-token` | require | string  |\n\n\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"user\": {\n        \"id\": \"d2f25e7e-0e5d-49cd-b791-4d8fcabeb073\",\n        \"Name\": \"Ram\",\n        \"Email\": \"ram@gmail.com\",\n    }\n}\n```\n---\n## Delete User\n#### DELETE /api/v1/auth/admin/user/{user_id}\n\n**Headers**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `x-api-token` | require | string  |\n\n\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"message\": \"user deleted\"\n}\n```\n---\n## Create Role\n#### POST /api/v1/auth/admin/role/create\n\n**Headers**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `x-api-token` | required | string  |\n\n**Body**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `name` | required | string  |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"message\": \"role created\"\n}\n```\n---\n## Add Role To User\n#### POST /api/v1/auth/admin/role/add\n\n**Headers**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `x-api-token` | required | string  |\n\n**Body**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `user_id` | required | uuid  |\n|     `role_id` | required | int  |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"message\": \"role added to user\"\n}\n```\n---\n## Remove Role from User\n#### POST /api/v1/auth/admin/role/remove\n\n**Headers**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `x-api-token` | required | string  |\n\n**Body**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `user_id` | required | uuid  |\n|     `role_id` | required | int  |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"message\": \"role removed from user\"\n}\n```\n---\n## Delete Role\n#### DELETE /api/v1/auth/admin/role/delete\n\n**Headers**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `x-api-token` | required | string  |\n\n**Body**\n\n|          Name | Required |  Type   |\n| -------------:|:--------:|:-------:| \n|     `id` | required | int  |\n\n**Response**\n```json\n{\n    \"error\": false,\n    \"message\": \"role deleted\"\n}\n```\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foverlorddamygod%2Fgo-auth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foverlorddamygod%2Fgo-auth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foverlorddamygod%2Fgo-auth/lists"}