diff --git a/src/claimDefinitions/forgejo.js b/src/claimDefinitions/forgejo.js new file mode 100644 index 0000000..939a995 --- /dev/null +++ b/src/claimDefinitions/forgejo.js @@ -0,0 +1,78 @@ +/* +Copyright 2023 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:\/\/(.*)\/(.*)\/(.*)\/?/ + +const processURI = (uri) => { + const match = uri.match(reURI) + + return { + serviceprovider: { + type: 'web', + name: 'forgejo' + }, + match: { + regularExpression: reURI, + isAmbiguous: true + }, + profile: { + display: `${match[2]}@${match[1]}`, + uri: `https://${match[1]}/${match[2]}`, + qr: null + }, + proof: { + uri: uri, + request: { + fetcher: E.Fetcher.HTTP, + access: E.ProofAccess.NOCORS, + format: E.ProofFormat.JSON, + data: { + url: `https://${match[1]}/api/v1/repos/${match[2]}/${match[3]}`, + format: E.ProofFormat.JSON + } + } + }, + claim: [{ + format: E.ClaimFormat.URI, + relation: E.ClaimRelation.EQUALS, + path: ['description'] + }] + } +} + +const tests = [ + { + uri: 'https://domain.org/alice/forgejo_proof', + shouldMatch: true + }, + { + uri: 'https://domain.org/alice/forgejo_proof/', + shouldMatch: true + }, + { + uri: 'https://domain.org/alice/other_proof', + shouldMatch: true + }, + { + uri: 'https://domain.org/alice', + shouldMatch: false + } +] + +exports.reURI = reURI +exports.processURI = processURI +exports.tests = tests diff --git a/src/claimDefinitions/index.js b/src/claimDefinitions/index.js index 88ae9a1..eaca7c1 100644 --- a/src/claimDefinitions/index.js +++ b/src/claimDefinitions/index.js @@ -27,6 +27,7 @@ const data = { hackernews: require('./hackernews'), lobsters: require('./lobsters'), devto: require('./devto'), + forgejo: require('./forgejo'), gitea: require('./gitea'), gitlab: require('./gitlab'), github: require('./github'),