diff --git a/src/claimDefinitions/index.js b/src/claimDefinitions/index.js index 87ac4f8..d31f3c2 100644 --- a/src/claimDefinitions/index.js +++ b/src/claimDefinitions/index.js @@ -21,6 +21,7 @@ const list = [ 'twitter', 'reddit', 'liberapay', + 'lichess', 'hackernews', 'lobsters', 'devto', @@ -41,6 +42,7 @@ const data = { twitter: require('./twitter'), reddit: require('./reddit'), liberapay: require('./liberapay'), + lichess: require('./lichess'), hackernews: require('./hackernews'), lobsters: require('./lobsters'), devto: require('./devto'), diff --git a/src/claimDefinitions/lichess.js b/src/claimDefinitions/lichess.js new file mode 100644 index 0000000..992cfe1 --- /dev/null +++ b/src/claimDefinitions/lichess.js @@ -0,0 +1,74 @@ +/* +Copyright 2021 Yarmo Mackenbach + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +const E = require('../enums') + +const reURI = /^https:\/\/lichess\.org\/@\/(.*)\/?/ + +const processURI = (uri) => { + const match = uri.match(reURI) + + return { + serviceprovider: { + type: 'web', + name: 'lichess' + }, + match: { + regularExpression: reURI, + isAmbiguous: false + }, + profile: { + display: match[1], + uri: uri, + qr: null + }, + proof: { + uri: `https://lichess.org/api/user/${match[1]}`, + request: { + fetcher: E.Fetcher.HTTP, + access: E.ProofAccess.GENERIC, + format: E.ProofFormat.JSON, + data: { + url: `https://lichess.org/api/user/${match[1]}`, + format: E.ProofFormat.JSON + } + } + }, + claim: { + format: E.ClaimFormat.FINGERPRINT, + relation: E.ClaimRelation.CONTAINS, + path: ['profile', 'links'] + } + } +} + +const tests = [ + { + uri: 'https://lichess.org/@/Alice', + shouldMatch: true + }, + { + uri: 'https://lichess.org/@/Alice/', + shouldMatch: true + }, + { + uri: 'https://domain.org/@/Alice', + shouldMatch: false + } +] + +exports.reURI = reURI +exports.processURI = processURI +exports.tests = tests