{"id":13412884,"url":"https://github.com/albrow/forms","last_synced_at":"2026-01-28T22:02:10.125Z","repository":{"id":19481993,"uuid":"22727684","full_name":"albrow/forms","owner":"albrow","description":"A lightweight go library for parsing form data or json from an http.Request.","archived":false,"fork":false,"pushed_at":"2022-12-16T03:14:57.000Z","size":37,"stargazers_count":137,"open_issues_count":2,"forks_count":24,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-07-31T20:51:38.767Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/albrow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-08-07T16:11:30.000Z","updated_at":"2024-07-09T09:48:44.000Z","dependencies_parsed_at":"2023-01-13T20:23:56.993Z","dependency_job_id":null,"html_url":"https://github.com/albrow/forms","commit_stats":null,"previous_names":["albrow/go-data-parser"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/albrow/forms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albrow%2Fforms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albrow%2Fforms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albrow%2Fforms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albrow%2Fforms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/albrow","download_url":"https://codeload.github.com/albrow/forms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/albrow%2Fforms/sbom","scorecard":{"id":178223,"data":{"date":"2025-08-11","repo":{"name":"github.com/albrow/forms","commit":"8737e1d22f1d7c834e2fc549881d3b5c6cc1837b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 1/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T18:15:28.224Z","repository_id":19481993,"created_at":"2025-08-16T18:15:28.224Z","updated_at":"2025-08-16T18:15:28.224Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28853196,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T15:15:36.453Z","status":"ssl_error","status_checked_at":"2026-01-28T15:15:13.020Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-07-30T20:01:30.586Z","updated_at":"2026-01-28T22:02:10.109Z","avatar_url":"https://github.com/albrow.png","language":"Go","readme":"Forms\n=====\n\n[![GoDoc](https://godoc.org/github.com/albrow/forms?status.svg)](https://godoc.org/github.com/albrow/forms)\n\nForms is a lightweight, but incredibly useful go library for parsing\nform data from an http.Request. It supports multipart forms, url-encoded\nforms, json data, and url query parameters. It also provides helper methods\nfor converting data into other types and a Validator object which can be\nused to validate the data. Forms is framework-agnostic and works directly\nwith the http package.\n\nVersion 0.4.0\n\n\nDevelopment Status\n------------------\n\nForms is no longer actively maintained, and therefore it is not recommended for\nuse in mission-critical production applications at this time. That said, it is\nfairly well tested and is probably fine to use for low-traffic hobby\nsites.\n\nForms follows semantic versioning but offers no guarantees of backwards\ncompatibility until version 1.0. Keep in mind that breaking changes might occur.\nWe will do our best to make the community aware of any non-trivial breaking\nchanges beforehand. We recommend using a dependency vendoring tool such as\n[godep](https://github.com/tools/godep) to ensure that breaking changes will not\nbreak your application.\n\nInstallation\n------------\n\nInstall like you would any other package:\n```\ngo get github.com/albrow/forms\n```\n\nThen include the package in your import statements:\n``` go\nimport \"github.com/albrow/forms\"\n```\n\nExample Usage\n-------------\n\nMeant to be used inside the body of an http.HandlerFunc or any function that\nhas access to an http.Request.\n\n``` go\nfunc CreateUserHandler(res http.ResponseWriter, req *http.Request) {\n\t// Parse request data.\n\tuserData, err := forms.Parse(req)\n\tif err != nil {\n\t\t// Handle err\n\t\t// ...\n\t}\n\n\t// Validate\n\tval := userData.Validator()\n\tval.Require(\"username\")\n\tval.LengthRange(\"username\", 4, 16)\n\tval.Require(\"email\")\n\tval.MatchEmail(\"email\")\n\tval.Require(\"password\")\n\tval.MinLength(\"password\", 8)\n\tval.Require(\"confirmPassword\")\n\tval.Equal(\"password\", \"confirmPassword\")\n\tval.RequireFile(\"profileImage\")\n\tval.AcceptFileExts(\"profileImage\", \"jpg\", \"png\", \"gif\")\n\tif val.HasErrors() {\n\t\t// Write the errors to the response\n\t\t// Maybe this means formatting the errors as json\n\t\t// or re-rendering the form with an error message\n\t\t// ...\n\t}\n\n\t// Use data to create a user object\n\tuser := \u0026models.User {\n\t\tUsername: userData.Get(\"username\"),\n\t\tEmail: userData.Get(\"email\"),\n\t\tHashedPassword: hash(userData.Get(\"password\")),\n\t}\n\n\t// Continue by saving the user to the database and writing\n\t// to the response\n\t// ...\n\n\n\t// Get the contents of the profileImage file\n\timageBytes, err := userData.GetFileBytes(\"profileImage\")\n\tif err != nil {\n\t  // Handle err\n\t}\n\t// Now you can either copy the file over to your server using io.Copy,\n\t// upload the file to something like amazon S3, or do whatever you want\n\t// with it.\n}\n```\n\nContributing\n------------\n\nSee [CONTRIBUTING.md](https://github.com/albrow/forms/blob/master/CONTRIBUTING.md)\n\nLicense\n-------\n\nForms is licensed under the MIT License. See the LICENSE file for more information.\n","funding_links":[],"categories":["Forms","表單","Go","表单","\u003cspan id=\"表单-forms\"\u003e表单 Forms\u003c/span\u003e","表单`表单解析与绑定`","Relational Databases","Uncategorized"],"sub_categories":["Search and Analytic Databases","Advanced Console UIs","高級控制台界面","SQL 查询语句构建库","检索及分析资料库","\u003cspan id=\"高级控制台用户界面-advanced-console-uis\"\u003e高级控制台用户界面 Advanced Console UIs\u003c/span\u003e","高级控制台界面","Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falbrow%2Fforms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falbrow%2Fforms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falbrow%2Fforms/lists"}