{"id":27998073,"url":"https://github.com/alphagov/paas-accounts","last_synced_at":"2025-07-06T16:04:31.215Z","repository":{"id":32195820,"uuid":"131860030","full_name":"alphagov/paas-accounts","owner":"alphagov","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-02T12:08:21.000Z","size":16423,"stargazers_count":1,"open_issues_count":5,"forks_count":3,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-07-02T13:25:45.631Z","etag":null,"topics":["cloud-foundry","paas","reliability-engineering"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alphagov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2018-05-02T14:08:24.000Z","updated_at":"2025-05-21T09:33:46.000Z","dependencies_parsed_at":"2024-03-11T11:52:01.924Z","dependency_job_id":"a929acaf-179d-4b68-9e40-16e09254e1b5","html_url":"https://github.com/alphagov/paas-accounts","commit_stats":{"total_commits":105,"total_committers":19,"mean_commits":5.526315789473684,"dds":0.6761904761904762,"last_synced_commit":"aefb42928f24e0b91a02459489e15228fb7f0fdb"},"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/alphagov/paas-accounts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alphagov%2Fpaas-accounts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alphagov%2Fpaas-accounts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alphagov%2Fpaas-accounts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alphagov%2Fpaas-accounts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alphagov","download_url":"https://codeload.github.com/alphagov/paas-accounts/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alphagov%2Fpaas-accounts/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263932016,"owners_count":23531707,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cloud-foundry","paas","reliability-engineering"],"created_at":"2025-05-08T22:47:19.976Z","updated_at":"2025-07-06T16:04:31.172Z","avatar_url":"https://github.com/alphagov.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# paas-accounts\n\nAPI for storing information about PaaS users.\n\n## Build\n\n```\ngo build -o paas-accounts .\n```\n\n## Test\n\n```\nmake start_postgres_docker\nmake test\nmake stop_postgres_docker\n```\n\n## Run\n\n```\nBASIC_AUTH_USERNAME=\"some-user\" \\\nBASIC_AUTH_PASSWORD=\"some-pass\" \\\nDATABASE_URL=\"postgres://...\" \\\nPORT=8080 \\\n\t./paas-accounts\n```\n\n## Deploy\n\nA manifest.yml exists for deploying to cloudfoundry. You should ensure the required environment variables are in place and that a suitable postgres database service is bound.\n\n## API\n\n### PUT /documents/:name\n\nCreate or update a document:\n\n    curl -u \u003cUSER\u003e:\u003cPASS\u003e -H \"Content-Type: application/json\" -X PUT -d '{\"content\": \"my content\"}' https://\u003cHOSTNAME\u003e/documents/my_document\n\n### GET /documents/:name\n\nRetrieve an existing document:\n\n    curl -u \u003cUSER\u003e:\u003cPASS\u003e https://\u003cHOSTNAME\u003e/documents/my_document\n\n## Agreements\n\n### POST /agreements\n\nRecord a user's agreement to a document:\n\n    curl -u \u003cUSER\u003e:\u003cPASS\u003e -H \"Content-Type: application/json\" -X POST -d '{\"user_uuid\": \"00000000-0000-0000-0000-000000000001\", \"document_name\": \"my_document\"}' https://\u003cHOSTNAME\u003e/agreements\n\n### GET /users/:uuid/documents\n\nGet all documents for a user:\n\n    curl -u \u003cUSER\u003e:\u003cPASS\u003e https://\u003cHOSTNAME\u003e/users/00000000-0000-0000-0000-000000000001/documents\n\nGet all documents for a user that need agreement:\n\n    curl -u \u003cUSER\u003e:\u003cPASS\u003e -G -d agreed=false https://\u003cHOSTNAME\u003e/users/00000000-0000-0000-0000-000000000001/documents\n\n### GET /users/:uuid\n\nGet a user:\n\n    curl -u \u003cUSER\u003e:\u003cPASS\u003e https://\u003cHOSTNAME\u003e/users/00000000-0000-0000-0000-000000000001\n\n### GET /users\n\nGet users by guids (accepts multiple guids):\n\n    curl -u \u003cUSER\u003e:\u003cPASS\u003e -G https://\u003cHOSTNAME\u003e/users?uuids=00000000-0000-0000-0000-000000000001,00000000-0000-0000-0000-000000000002\n\nGet users by email (accepts a single email address):\n\n    curl -u \u003cUSER\u003e:\u003cPASS\u003e -G https://\u003cHOSTNAME\u003e/users?email=example%40example.com\n\n### POST /users/:uuid\n\nPOST a user:\n\n    curl -u \u003cUSER\u003e:\u003cPASS\u003e -H \"Content-Type: application/json\" -X POST -d '{\"user_email\": \"example@example.com\", \"username\": \"example@example.com\", \"user_uuid\": \"00000000-0000-0000-0000-000000000001\"}' https://\u003cHOSTNAME\u003e/users/00000000-0000-0000-0000-000000000001\n\n### PATCH /users/:uuid\n\nPATCH a user:\n\n    curl -u \u003cUSER\u003e:\u003cPASS\u003e -H \"Content-Type: application/json\" -X PATCH -d '{\"user_email\": \"newexample@example.com\"}' https://\u003cHOSTNAME\u003e/users/00000000-0000-0000-0000-000000000001\n\n### Error handling\nTo handle an error in a handler function, such as an entity not being found or an internal server error, return one of the error types from `api/errors.go`\n\n```go\nfunc HttpHandler(db *database.DB) echo.HandlerFunc {\n\treturn func(c echo.Context) error {\n\t\tthing, err := db.GetAThing(c.Param(\"id\"))\n\t\t\n\t\tif err != nil {\n\t\t\tif err == database.ErrNotFound {\n\t\t\t\treturn NotFoundError{\"thing not found\"}\n\t\t\t}\n\t\t\t\n\t\t\treturn InternalServerError{err}\n\t\t}\n\t\t\n\t\treturn c.JSON(http.StatusOK, thing)\n\t}\n\t\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falphagov%2Fpaas-accounts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falphagov%2Fpaas-accounts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falphagov%2Fpaas-accounts/lists"}