support basic auth in ETAPI

This commit is contained in:
zadam 2022-10-08 20:59:11 +02:00
parent 6d4ef4ee3d
commit 3e4a9f63fa
4 changed files with 38 additions and 1 deletions

View File

@ -15,6 +15,7 @@ servers:
- url: http://localhost:8080/etapi
security:
- EtapiTokenAuth: []
- EtapiBasicAuth: []
paths:
/create-note:
post:
@ -677,6 +678,14 @@ components:
type: apiKey
in: header
name: Authorization
EtapiBasicAuth:
type: http
scheme: basic
description: >
Basic Auth where username is arbitrary string (e.g. "trilium", not checked),
username is the ETAPI token.
To emphasize, do not use Trilium password here (won't work), only the generated
ETAPI token (from Options -> ETAPI)
schemas:
CreateNoteDef:
type: object

View File

@ -30,6 +30,20 @@ function parseAuthToken(auth) {
return null;
}
if (auth.startsWith("Basic ")) {
// allow also basic auth format for systems which allow this type of authentication
// expect ETAPI token in the password field, ignore username
// https://github.com/zadam/trilium/issues/3181
const basicAuthStr = utils.fromBase64(auth.substring(6)).toString("UTF-8");
const basicAuthChunks = basicAuthStr.split(":");
if (basicAuthChunks.length === 2) {
auth = basicAuthChunks[1];
} else {
return null;
}
}
const chunks = auth.split("_");
if (chunks.length === 1) {

View File

@ -3,5 +3,5 @@ Authorization: {{authToken}}
> {%
client.assert(response.status === 200);
client.assert(response.body == "Hi there!");
client.assert(response.body.clipperProtocolVersion === "1.0");
%}

View File

@ -0,0 +1,14 @@
GET {{triliumHost}}/etapi/app-info
Authorization: Basic whatever {{authToken}}
> {%
client.assert(response.status === 200);
client.assert(response.body.clipperProtocolVersion === "1.0");
%}
###
GET {{triliumHost}}/etapi/app-info
Authorization: Basic whatever wrong pass
> {% client.assert(response.status === 401); %}