{"id":36444333,"url":"https://github.com/uclaacm/teach-la-go-backend","last_synced_at":"2026-01-11T22:02:55.156Z","repository":{"id":36961671,"uuid":"218427099","full_name":"uclaacm/teach-la-go-backend","owner":"uclaacm","description":"🌱 Go Backend for Teach LA's Editor","archived":false,"fork":false,"pushed_at":"2024-02-07T10:44:38.000Z","size":438,"stargazers_count":8,"open_issues_count":24,"forks_count":6,"subscribers_count":12,"default_branch":"master","last_synced_at":"2024-06-19T05:48:22.455Z","etag":null,"topics":["backend","education","go","golang","teach-la"],"latest_commit_sha":null,"homepage":"https://documenter.getpostman.com/view/10224331/TW6xmnn2","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/uclaacm.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}},"created_at":"2019-10-30T02:31:30.000Z","updated_at":"2023-12-11T14:20:32.000Z","dependencies_parsed_at":"2024-06-19T05:35:11.373Z","dependency_job_id":null,"html_url":"https://github.com/uclaacm/teach-la-go-backend","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/uclaacm/teach-la-go-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uclaacm%2Fteach-la-go-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uclaacm%2Fteach-la-go-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uclaacm%2Fteach-la-go-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uclaacm%2Fteach-la-go-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uclaacm","download_url":"https://codeload.github.com/uclaacm/teach-la-go-backend/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uclaacm%2Fteach-la-go-backend/sbom","scorecard":{"id":906695,"data":{"date":"2025-08-11","repo":{"name":"github.com/uclaacm/teach-la-go-backend","commit":"836670f083e3383baffba92d21106b1ac2b3ccfe"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":"Code-Review","score":5,"reason":"Found 16/28 approved changesets -- score normalized to 5","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":"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":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/go-tests.yml:1","Warn: no topLevel permission defined: .github/workflows/golangci-lint.yml:1","Info: no jobLevel write permissions found"],"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go-tests.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/uclaacm/teach-la-go-backend/go-tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go-tests.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/uclaacm/teach-la-go-backend/go-tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/go-tests.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/uclaacm/teach-la-go-backend/go-tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/go-tests.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/uclaacm/teach-la-go-backend/go-tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/golangci-lint.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/uclaacm/teach-la-go-backend/golangci-lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/golangci-lint.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/uclaacm/teach-la-go-backend/golangci-lint.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/golangci-lint.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/uclaacm/teach-la-go-backend/golangci-lint.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/golangci-lint.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/uclaacm/teach-la-go-backend/golangci-lint.yml/master?enable=pin","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned"],"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":"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":"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":"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":"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":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 1.0.0 not signed: https://api.github.com/repos/uclaacm/teach-la-go-backend/releases/34391886","Warn: release artifact 1.0.0 does not have provenance: https://api.github.com/repos/uclaacm/teach-la-go-backend/releases/34391886"],"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":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 22 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"}},{"name":"Vulnerabilities","score":0,"reason":"12 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-1031 / GHSA-crxj-hrmp-4rwf","Warn: Project is vulnerable to: GO-2022-0288","Warn: Project is vulnerable to: GO-2022-0969 / GHSA-69cg-p879-7622","Warn: Project is vulnerable to: GO-2022-1144 / GHSA-xrjj-mj9h-534m","Warn: Project is vulnerable to: GO-2023-1571 / GHSA-vvpx-j8f3-3w6h","Warn: Project is vulnerable to: GO-2023-1988 / GHSA-2wrh-6pvc-2jm9","Warn: Project is vulnerable to: GO-2023-2102 / GHSA-4374-p667-p6c8","Warn: Project is vulnerable to: GO-2023-2153 / GHSA-m425-mq94-257g / GHSA-qppj-fm5r-hxr3","Warn: Project is vulnerable to: GO-2024-2687 / GHSA-4v7x-pqxf-cx7m","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T17:37:13.687Z","repository_id":36961671,"created_at":"2025-08-24T17:37:13.687Z","updated_at":"2025-08-24T17:37:13.687Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28324845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T18:42:50.174Z","status":"ssl_error","status_checked_at":"2026-01-11T18:39:13.842Z","response_time":60,"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":["backend","education","go","golang","teach-la"],"created_at":"2026-01-11T22:02:55.080Z","updated_at":"2026-01-11T22:02:55.148Z","avatar_url":"https://github.com/uclaacm.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Coverage Status](https://coveralls.io/repos/github/uclaacm/teach-la-go-backend/badge.svg?branch=master)](https://coveralls.io/github/uclaacm/teach-la-go-backend?branch=master)\n\n# teach-la-go-backend\n\nHey there! This is the repo for the Go Backend for the Teach LA editor. If you're a frontend dev and are just looking for documentation of our endpoints, you can find that [right here](https://documenter.getpostman.com/view/10224331/TW6xmnn2). If you're a backend dev (or prospective dev) looking to get involved, then read on for info on how to get up and running!\n\n# Quickstart\n\nTo run the backend locally, you can download the latest build for your system from the\n[releases page](https://github.com/uclaacm/teach-la-go-backend/releases/latest). After\ndoing so, follow along with the guide below!\n\n```sh\n$ # compile the server\n$ make\n$ # run the server\n$ ./bin/tlabe -h\nNAME:\n   Teach LA Go Backend - tlabe [options]\n\nUSAGE:\n   tlabe [global options] [arguments...]\n\nVERSION:\n   1.0.0\n\nDESCRIPTION:\n   Teach LA's editor backend.\n\nGLOBAL OPTIONS:\n   --dotenv value, -e value  Specify a path to a dotenv file to specify credentials\n   --json value, -j value    Specify a path to a JSON file to specify credentials\n   --verbose, -v             Change the log level used by echo's logger middleware (default: false)\n   --port value, -p value    Change the port number (default: \"8081\")\n   --help, -h                Show help (default: false)\n   --version, -V             Print the version and exit (default: false)\n\n$ ./bin/tlabe -j credentials.json\n⇨ http server started on [::]:8081\n\n$ # from here, you can start up the frontend using your own backend!\n```\n\n# Developer Setup\n\nHere's what you need and how to **build** the project:\n* [git](https://git-scm.com/)\n* [go](https://golang.org/)\n* [make](https://www.gnu.org/software/make/manual/make.html) (optional)\n\nHere's what you need to get your code PR-ready and **contribute** to the project:\n* For formatting, we use `gofmt`. This is included with your installation of [go](https://golang.org/)\n* For linting, we use [`golangci-lint`](https://github.com/golangci/golangci-lint).\n\n```sh\ngit clone https://github.com/uclaacm/teach-la-go-backend.git\ncd teach-la-go-backend\n\n# build the server for your platform\nmake\n# ...or build it for all platforms with the below command:\n# make all\n\n# run the server\n./bin/tlabe --help\n```\n\nIf you try running the server at this point (with `./bin/tlabe`), the program will crash with a message complaining that a DB client could not be opened. To be precise, it will complain with:\n\n```json\n{\n    \"time\": \"2020-07-10T02:34:46.7357463-07:00\",\n    \"level\": \"FATAL\",\n    \"prefix\": \"echo\",\n    \"file\": \"server.go\",\n    \"line\": \"37\",\n    \"message\": \"no $TLACFG environment variable provided\"\n}\n```\n\nTo **run** the project for live development - not just build it - one needs to be able to interact with the TeachLA Firebase through service account credentials (usually a single JSON file). These can be obtained during a TeachLA dev team meeting, or by messaging the #go-backend channel on the TLA Slack.\n\nOnce you have acquired a copy of `credentials.json` or otherwise, you can specify the credentials file location:\n\n```sh\n./bin/tlabe -j credentials.json\n```\n\nYou can now run the server you built!\n\n## Testing\n\nDevelopment is test-focused. Any code you contribute should have tests to go with it. Tests should be placed in another file in the same directory with the naming convention `my_file_name_test.go`.\n\n**Note:** Before tests can be run, you must configure the `TLACFG` environment variable\nto store the contents of `credentials.json`, like below. This might be changed in the future\n([see here](https://github.com/uclaacm/teach-la-go-backend/pull/10#issuecomment-1596011496)).\n\n```sh\nexport TLACFG=\"$(cat credentials.json)\"\n```\n\nRun tests with the following commands:\n\n```sh\n# run all tests\ngo test ./...\n\n# do so with **verbosity**\ngo test -v ./...\n\n# run a specific test\ngo test -run TestNameHere\n```\n\nWith this, you can build, test, and run the actual backend. If you'd like to get working, you can stop reading here. Otherwise, you can scan through some of the FAQ below.\n\n## FAQ\n\n### Q: What are the naming conventions?\n\nGo has some interesting naming conventions. Here's the clif notes:\n* Filenames should be `snake_cased.go`\n* Function and variable names should be `camelCased()`\n* Any functions and variables in a package with names that are `UpperCamelCased` are exported types and can be imported to other packages.\n* Exported constants should be in `CAPS`.\n* Test filenames should be `snake_cased_and_end_in_test.go`\n* Test routine names should begin with `Test` and mention the function or feature they intend to test (i.e. `TestCreateProgram`).\n\n### Q: What should my coding style be?\n\nPlease, please, **please** use `gofmt` to format your code. Use `golangci-lint` for linting. This makes life easier down the line when others read your code.\n\nMake sure that you:\n* Comment all exported symbols.\n* Keep names idiomatic.\n\n### Q: Where should I put my code?\n\nWe keep our code for handlers in the `db` folder. Each file name describes the class of handlers and associated database types it deals with. For example, `db/program.go` contains the definition for the `Program` type and all handlers that work with it.\n\nIf you have any code that extends functionality of an existing package -- say, `pkg` -- place it in another folder `pkgext`. You can take a look at `httpext` for an example of this.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuclaacm%2Fteach-la-go-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuclaacm%2Fteach-la-go-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuclaacm%2Fteach-la-go-backend/lists"}