{"id":19156907,"url":"https://github.com/bertrandmartel/vue-basic-captcha","last_synced_at":"2026-04-29T20:32:13.341Z","repository":{"id":94809060,"uuid":"261312028","full_name":"bertrandmartel/vue-basic-captcha","owner":"bertrandmartel","description":":wrench: Template project of a Vue.js application with basic authentication \u0026 captcha integration in Go","archived":false,"fork":false,"pushed_at":"2020-05-06T12:25:38.000Z","size":156,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-17T11:04:46.467Z","etag":null,"topics":["basic-authentication","bcrypt","captcha","docker","echo-golang","golang","ngrok","redis","vuejs","vuetify","vuex"],"latest_commit_sha":null,"homepage":"","language":"Vue","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/bertrandmartel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2020-05-04T22:46:57.000Z","updated_at":"2023-04-13T23:49:29.000Z","dependencies_parsed_at":"2023-07-16T08:45:21.631Z","dependency_job_id":null,"html_url":"https://github.com/bertrandmartel/vue-basic-captcha","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bertrandmartel/vue-basic-captcha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fvue-basic-captcha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fvue-basic-captcha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fvue-basic-captcha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fvue-basic-captcha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bertrandmartel","download_url":"https://codeload.github.com/bertrandmartel/vue-basic-captcha/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bertrandmartel%2Fvue-basic-captcha/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273657104,"owners_count":25145012,"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-09-04T02:00:08.968Z","response_time":61,"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":["basic-authentication","bcrypt","captcha","docker","echo-golang","golang","ngrok","redis","vuejs","vuetify","vuex"],"created_at":"2024-11-09T08:36:22.585Z","updated_at":"2026-04-29T20:32:13.285Z","avatar_url":"https://github.com/bertrandmartel.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vue Basic Captcha\n\n![build](https://github.com/bertrandmartel/vue-basic-captcha/workflows/build/badge.svg) [![License](http://img.shields.io/:license-mit-blue.svg)](LICENSE.md)\n\nTemplate project of a Vue.js application with basic authentication \u0026 captcha integration in Go\n\nThis template is great for making a quick responsive Vue.js project protected by username/password with captcha with vuetify and vuex out of the box. Redis is used to store the session \u0026 the username/password (password is hashed \u0026 salted).\n\n![vuejs](https://user-images.githubusercontent.com/5183022/81025085-bd82b880-8e75-11ea-9d45-814ece3f9697.png)\n\n## Install Demo\n\n#### Using binaries\n\n[Download the latest release](https://github.com/bertrandmartel/vue-basic-captcha/releases/latest)\n\n* start ngrok on port 6004\n* update host \u0026 captcha secret key in config.json\n* run `./main` or `./main.exe`\n* go to `http://your.host.ngrok.io:6004`\n\nUsing binaries, you must have redis installed \n\n#### Using Docker\n\n```bash\ngit clone git://github.com/bertrandmartel/vue-basic-captcha.git\ncd vue-basic-captcha\n```\n\n* start ngrok on port 6004 and note down the port in the HOSTNAME variable in docker-compose below\n\nCreate docker-compose.yml :\n\n```yaml\nversion: '2'\n\nservices:\n  backend:\n    build: .\n    environment:\n      REDIS_HOST: redis\n      HOSTNAME: your.host.com\n      CAPTCHA_SECRET_KEY: [captcha secret key here]\n  redis:\n    image: redis:6.0\n```\n\n```bash\ndocker-compose up\n```\n\nCreate a user using the provisioning tool :\n```\ndocker exec -it $(docker ps | grep vue-basic-captcha_backend | cut -d ' ' -f1) sh\ncd ../provisioning/add\n./add\n```\n\ngo to `http://your.host.ngrok.io:6004`\n\n#### Developer mode\n\nIn developer mode, you must have redis installed \n\n```bash\ngit clone git://github.com/bertrandmartel/vue-basic-captcha.git\ncd vue-basic-captcha\ncd backend\nmake install\n```\n\ncreate `.env.secret` in backend directory with content : \n\n```bash\nHOSTNAME=your.host.ngrok.io\nCAPTCHA_SECRET_KEY=[captcha secret key here]\n```\n\nThen run the backend :\n\n```basj\nmake run\n```\n\nin another tab\n\n```\ncd frontend\nnpm i\nvue ui\n```\n\ngo to `http://your.host.ngrok.io:6004`\n\n## Provisioning tools\n\n2 programs provide way to add \u0026 remove a user to/from Redis :\n\n* add a user\n\n```bash\ncd ./provisioning\ngo run ./add\n```\n\n* delete a user\n\n```bash\ncd ./provisioning\ngo run ./delete\n```\n\n## Configuration\n\n2 way of configuring this app :\n\n* config.json\n\n```\n{\n    \"version\": \"0.1\",\n    \"port\": 6004,\n    \"serverPath\": \"http://localhost\",\n    \"hostname\": \"your.host.com\",\n    \"captchaSecretKey\": \"[captcha secret key here]\"\n}\n```\n\n* environment variables \n\n|  Name  | Sample values  | Description |\n|--------|--------------|---------------|\n| REDIS_HOST |  redis / localhost |  Redis hostname |\n| HOSTNAME   |  your.host.com     | hostname to be checked in captcha response |\n| CAPTCHA_SECRET_KEY |  [captchaKey]  | captcha secret key | \n\n## Open Source components\n\n* Backend in Go\n\n  * [echo](https://echo.labstack.com/)\n  * [go-redis](https://github.com/go-redis/redis)\n\n* Frontend in Javascript\n\n  * [vue.js](https://vuejs.org/)\n  * [vuetify](https://vuetifyjs.com/en/getting-started/quick-start/)\n  * [vuex](https://vuex.vuejs.org/)\n  * [vue-router](https://router.vuejs.org/)\n\n## External resources\n\n* [bcrypt](https://godoc.org/golang.org/x/crypto/bcrypt) is used to hash/salt the password in provisioning tools and when comparigng hashes. [This post](https://medium.com/@jcox250/password-hash-salt-using-golang-b041dc94cb72) was very helpful\n\n* Login view inspired by [this post](https://medium.com/vue-mastery/getting-started-with-vuetify-2-0-522ad3a55154)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbertrandmartel%2Fvue-basic-captcha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbertrandmartel%2Fvue-basic-captcha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbertrandmartel%2Fvue-basic-captcha/lists"}