A simple CAPTCHA service implementation.
Go to file
2023-01-08 17:38:51 +04:00
bin Initial commit with a fully working program, lel. 2022-06-24 23:09:46 +04:00
build/archlinux Updated version to 2.0.0. 2022-10-20 22:48:20 +04:00
cmd/justcaptchad Changed defaults. Now expiry is 10 minutes and socket named just as sock. 2023-01-08 17:04:20 +04:00
init Changed defaults. Now expiry is 10 minutes and socket named just as sock. 2023-01-08 17:04:20 +04:00
internal HTTP server moved to internal. DwellingCaptcha moved to pkg. 2023-01-08 17:00:19 +04:00
pkg HTTP server moved to internal. DwellingCaptcha moved to pkg. 2023-01-08 17:00:19 +04:00
.gitignore Initial commit with a fully working program, lel. 2022-06-24 23:09:46 +04:00
go.mod Dependency update. 2023-01-08 17:32:31 +04:00
go.sum Dependency update. 2023-01-08 17:32:31 +04:00
LICENSE Initial commit with a fully working program, lel. 2022-06-24 23:09:46 +04:00
Makefile SystemD service moved out to the root of init dir and renamed to systemd.service. 2023-01-08 17:02:43 +04:00
README.md README updated. 2023-01-08 17:38:51 +04:00

justcaptcha ver. 2.0.0

A simple CAPTCHA service implementation.

Service usage

justcaptchad -expiry 10m -listen /var/run/justcaptcha/sock

-expiry takes time for CAPTCHA to be valid for in format X{s,m,h}.

-listen is ip:port or /path/to/unix.sock to listen on.

Service HTTP API

Errors

All error codes are returned with an error message in text/plain.

Create a new CAPTCHA

POST /

It will return an ID of a new CAPTCHA in text/plain.

HTTP codes

  • 201 if created (always being created)

Get an image for a CAPTCHA

GET /:captcha_id/image?style=

Responds with an image in JPEG format (image/jpeg).

An optional URL parameter style= set a name of a CAPTCHA style if it is supported by CAPTCHA implementation.

HTTP codes

  • 200 if exists
  • 404 if doesn't exist
  • 500 if for some reason an image wasn't created

Submit an answer

POST /:captcha_id

Accepts application/x-www-form-urlencoded content type.

It takes one parameter answer=123456.

Responds with an empty body and one of the HTTP codes.

HTTP codes

  • 202 if solved
  • 403 if not solved

Check if captcha is solved

GET /:captcha_id?remove

Responds with an empty body and one of the HTTP codes.

If an optional remove parameter without a value supplied CAPTCHA will be removed without checking and a HTTP code 204 will be sent. Otherwise, a 403 HTTP code will be sent if it is not solved.

A remove parameter was added because browsers will print an error in a console if HTTP code is not within 2xx, so to keep a console clean you can provide this parameter.

This can be useful to remove an unused CAPTCHA from a DB without waiting for it to be expired. E.g. when a visitor requests for a new CAPTCHA or leaving a page.

HTTP codes

  • 204 if solved
  • 403 if not solved

Example of interaction

First a client makes a POST request with empty body to create a new CAPTCHA and obtains an ID for it.

POST /

As a result we get an ID n60f2K9JiD5c4qX9MYe90A54nT0nnJrtgfhAjfaWtBg.

Then a client requests an image for a new CAPTCHA. E.g. with a dark style.

GET /n60f2K9JiD5c4qX9MYe90A54nT0nnJrtgfhAjfaWtBg/image?style=dark

Then a client submits an answer for a CAPTCHA.

POST 'answer=198807' /n60f2K9JiD5c4qX9MYe90A54nT0nnJrtgfhAjfaWtBg

And if answer was correct a client gets a HTTP code 202. Or 403 otherwise.

Then a server checks if CAPTCHA was solved with following request.

GET /n60f2K9JiD5c4qX9MYe90A54nT0nnJrtgfhAjfaWtBg