feat: API client with method to verify authorization token
This commit is contained in:
parent
8ffc6cd45f
commit
567bd494e6
5 changed files with 1502 additions and 0 deletions
21
Makefile
Normal file
21
Makefile
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
env:
|
||||||
|
./scripts/download-cli.sh download
|
||||||
|
. venv/bin/activate && pip install -r requirements.txt
|
||||||
|
. venv/bin/activate && pip install build
|
||||||
|
|
||||||
|
test.env:
|
||||||
|
$(eval SECRET = $(shell . ./venv/bin/activate && python ./scripts/create_captcha.py get_secret $(INSTANCE_URL) $(USERNAME) $(PASSWORD)))
|
||||||
|
$(eval SITEKEY = $(shell . ./venv/bin/activate && python ./scripts/create_captcha.py create_captcha $(INSTANCE_URL) $(USERNAME) $(PASSWORD)))
|
||||||
|
$(eval WIDGET_URL = $(shell . ./venv/bin/activate && python ./scripts/create_captcha.py widget_url $(INSTANCE_URL) $(SITEKEY)))
|
||||||
|
$(eval TOKEN = $(shell ./scripts/download-cli.sh gen_pow $(WIDGET_URL)))
|
||||||
|
@-rm .env.local
|
||||||
|
echo "SECRET=$(SECRET)" > .env.local
|
||||||
|
echo "SITEKEY=$(SITEKEY)" >> .env.local
|
||||||
|
echo "TOKEN=$(TOKEN)" >> .env.local
|
||||||
|
|
||||||
|
|
||||||
|
test:
|
||||||
|
pnpm test
|
||||||
|
|
||||||
|
lint:
|
||||||
|
black src/ scripts/
|
1384
package-lock.json
generated
Normal file
1384
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
46
package.json
Normal file
46
package.json
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{
|
||||||
|
"name": "mcaptcha-api-js",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"author": "Aravinth Manivannan <realaravinth@batsense.net>",
|
||||||
|
"description": "Library to interact with mCaptcha API",
|
||||||
|
"license": "(MIT OR Apache-2.0)",
|
||||||
|
"keywords": ["mCaptcha", "CAPTCHA", "proof of work"],
|
||||||
|
"homepage": "https://mcaptcha.org",
|
||||||
|
"main": "src/index.js",
|
||||||
|
"files": ["src"],
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://git.batsense.net/mCaptcha/mcaptcha-api-js/issues",
|
||||||
|
"email": "realaravinth@batsense.net"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "individual",
|
||||||
|
"url": "http://mcaptcha.org/donate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "liberapay",
|
||||||
|
"url": "https://liberapay.com/mcaptcha"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "individual",
|
||||||
|
"url": "http://batsense.net/donate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "liberapay",
|
||||||
|
"url": "https://liberapay.com/realaravinth"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.batsense.net/mCaptcha/mcaptcha-api-js"
|
||||||
|
},
|
||||||
|
|
||||||
|
"scripts": {
|
||||||
|
"test": "mocha src/index.test.js"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"dotenv": "^16.3.1",
|
||||||
|
"mocha": "^10.2.0",
|
||||||
|
"request": "^2.88.2"
|
||||||
|
}
|
||||||
|
}
|
7
requirements.txt
Normal file
7
requirements.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
certifi==2023.11.17
|
||||||
|
charset-normalizer==3.3.2
|
||||||
|
idna==3.6
|
||||||
|
iniconfig==2.0.0
|
||||||
|
pluggy==1.3.0
|
||||||
|
requests==2.31.0
|
||||||
|
urllib3==2.1.0
|
44
src/index.js
Normal file
44
src/index.js
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
/**
|
||||||
|
* mCaptcha API client
|
||||||
|
*/
|
||||||
|
class MCaptcha {
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @param {string} sitekey - the unique identifier of captcha configuration
|
||||||
|
* @param {string} secret - account secret, can be obtained from mCaptcha dashboard
|
||||||
|
* @param {URL} instanceUrl - the URL of the mCaptcha instance you are using
|
||||||
|
*/
|
||||||
|
constructor(sitekey, secret, instanceUrl) {
|
||||||
|
this.sitekey = sitekey;
|
||||||
|
this.secret = secret;
|
||||||
|
this.verify_url = new URL(instanceUrl);
|
||||||
|
this.verify_url.pathname = "/api/v1/pow/siteverify";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify authorization token presented by user
|
||||||
|
* @param {string} token
|
||||||
|
*/
|
||||||
|
async verify(token) {
|
||||||
|
let payload = {
|
||||||
|
token: token,
|
||||||
|
secret: this.secret,
|
||||||
|
key: this.sitekey,
|
||||||
|
};
|
||||||
|
let res = await fetch(this.verify_url, {
|
||||||
|
method: "POST",
|
||||||
|
body: JSON.stringify(payload),
|
||||||
|
headers: { "Content-Type": "application/json; charset=UTF-8" },
|
||||||
|
});
|
||||||
|
if (res.status != 200) {
|
||||||
|
let error = await res.json();
|
||||||
|
error = `status code: ${res.status}: ${error.error}`;
|
||||||
|
throw new Error(error);
|
||||||
|
}
|
||||||
|
res = await res.json();
|
||||||
|
console.log(res);
|
||||||
|
return res.valid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = MCaptcha;
|
Loading…
Reference in a new issue