{"id":34612190,"url":"https://github.com/kevinschoon/go-gdpr","last_synced_at":"2025-12-24T14:16:59.625Z","repository":{"id":57608000,"uuid":"133938866","full_name":"kevinschoon/go-gdpr","owner":"kevinschoon","description":"Experimental Go GDPR Implementation","archived":false,"fork":false,"pushed_at":"2018-06-08T23:15:25.000Z","size":248,"stargazers_count":3,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-16T00:19:34.075Z","etag":null,"topics":["compliance","european-union","gdpr","go","golang","opengdpr","privacy"],"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/kevinschoon.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}},"created_at":"2018-05-18T10:16:31.000Z","updated_at":"2023-09-03T09:07:27.000Z","dependencies_parsed_at":"2022-09-03T06:24:17.710Z","dependency_job_id":null,"html_url":"https://github.com/kevinschoon/go-gdpr","commit_stats":null,"previous_names":["greencase/go-gdpr"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kevinschoon/go-gdpr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinschoon%2Fgo-gdpr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinschoon%2Fgo-gdpr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinschoon%2Fgo-gdpr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinschoon%2Fgo-gdpr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kevinschoon","download_url":"https://codeload.github.com/kevinschoon/go-gdpr/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kevinschoon%2Fgo-gdpr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28003726,"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","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"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":["compliance","european-union","gdpr","go","golang","opengdpr","privacy"],"created_at":"2025-12-24T14:16:59.570Z","updated_at":"2025-12-24T14:16:59.617Z","avatar_url":"https://github.com/kevinschoon.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-gdpr\n[![CircleCI](https://circleci.com/gh/greencase/go-gdpr/tree/master.svg?style=svg)](https://circleci.com/gh/greencase/go-gdpr/tree/master)\n[![GoDoc](https://godoc.org/github.com/greencase/go-gdpr?status.svg)](https://godoc.org/github.com/greencase/go-gdpr)\n\n`go-gdpr` is an implementation of the [OpenGDPR](https://www.opengdpr.org) specification for use with the EU [GDPR](https://www.eugdpr.org/) regulation. \n\n**Disclaimer: Using this library does not imply accordance with GDPR!**\n\n## Installation\n\n\n    go get github.com/greencase/go-gdpr\n\n\n## Usage\n\n`go-gdpr` is intended to be used as a library by exposing business logic wrapped as middleware through an HTTP interface that meets the specifications in the OpenGDPR standard. There is no single concise way to achieve GDPR \"compliance\" per-say without implementing platform specific processes; `go-gdpr` only provides convenient components for fulfilling requests deemed mandatory by the GDPR legislation.\n\n\n### Concepts\n\nThe two major concepts used in this library are the  `Controller` and `Processor` types. Their definitions are listed below and borrowed directly from the OpenGDPR specification.\n\n#### Controller\n\n\u003e An entity which makes the decision about what personal data  will be processed and the types of processing that will be done with respect to that personal data. The Data Controller receives Data Subject requests from the Data Subjects and validates them. \n\n#### Processor\n\n\u003e The organization that processes data pursuant to the instructions of the Controller on behalf of the Controller. The Data Processor receives data subject requests via RESTful endpoints and is responsible for fulfilling requests.\n\n## Usage\n\nThe primary use case for `go-gdpr` is wrapping business logic via the `Processor` and `Controller` interface with the `Server` type. There is an additional `Client` which allows the consumer to access the processor via HTTP calls. This library might also be useful by providing static typing for other server implementations. See the [example](https://github.com/greencase/go-gdpr/tree/master/example) section for a more thorough introduction.\n\n### Simple Processor Example\n\nA basic `Processor` can be implemented with just three methods:\n\n```go\npackage main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/greencase/go-gdpr\"\n)\n\ntype Processor struct{}\n\nfunc (p *Processor) Request(req *gdpr.Request) (*gdpr.Response, error) {\n\t// Process the request..\n\treturn nil, nil\n}\n\nfunc (p *Processor) Status(id string) (*gdpr.StatusResponse, error) {\n\t// Check the status of the request..\n\treturn nil, nil\n}\n\nfunc (p *Processor) Cancel(id string) (*gdpr.CancellationResponse, error) {\n\t// Cancel the request..\n\treturn nil, nil\n}\n\nfunc main() {\n\tserver := gdpr.NewServer(\u0026gdpr.ServerOptions{\n\t\tSigner:          gdpr.NoopSigner{},\n\t\tProcessorDomain: \"my-processor-domain.com\",\n\t\tProcessor:       \u0026Processor{},\n\t\tIdentities: []gdpr.Identity{\n\t\t\tgdpr.Identity{\n\t\t\t\tType:   gdpr.IDENTITY_EMAIL,\n\t\t\t\tFormat: gdpr.FORMAT_RAW,\n\t\t\t},\n\t\t},\n\t\tSubjectTypes: []gdpr.SubjectType{\n\t\t\tgdpr.SUBJECT_ACCESS,\n\t\t\tgdpr.SUBJECT_ERASURE,\n\t\t\tgdpr.SUBJECT_PORTABILITY,\n\t\t},\n\t})\n\thttp.ListenAndServe(\":4000\", server)\n}\n```\n\n### Simple Controller Example\n\nA `Controller` only requires a single method, although a `Client` must also be used to communicate with the `Processor`:\n\n```go\npackage main\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/greencase/go-gdpr\"\n)\n\ntype Controller struct{}\n\nfunc (c *Controller) Callback(req *gdpr.CallbackRequest) error {\n\t// Process the callback..\n\treturn nil\n}\n\nfunc main() {\n\tserver := gdpr.NewServer(\u0026gdpr.ServerOptions{\n\t\tController: \u0026Controller{},\n\t\tVerifier:   gdpr.NoopVerifier{},\n\t})\n\thttp.ListenAndServe(\":4001\", server)\n}\n```\n\n## Contributing\n\nWe are open to any and all contributions so long as they improve the library, feel free to open up a new [issue](https://github.com/greencase/go-gdpr/issues)!\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkevinschoon%2Fgo-gdpr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkevinschoon%2Fgo-gdpr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkevinschoon%2Fgo-gdpr/lists"}