From 41696afd0d41304171b7ac36cff3b492e91fadb3 Mon Sep 17 00:00:00 2001 From: Yarmo Mackenbach Date: Sat, 26 Dec 2020 13:52:49 +0100 Subject: [PATCH] Add owncast service provider --- src/serviceproviders.js | 2 + src/serviceproviders/owncast.js | 74 +++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 src/serviceproviders/owncast.js diff --git a/src/serviceproviders.js b/src/serviceproviders.js index ce231d7..bd67495 100644 --- a/src/serviceproviders.js +++ b/src/serviceproviders.js @@ -32,6 +32,7 @@ const list = [ 'mastodon', 'fediverse', 'discourse', + 'owncast', ] const data = { @@ -49,6 +50,7 @@ const data = { mastodon: require('./serviceproviders/mastodon'), fediverse: require('./serviceproviders/fediverse'), discourse: require('./serviceproviders/discourse'), + owncast: require('./serviceproviders/owncast'), } const match = (uri, opts) => { diff --git a/src/serviceproviders/owncast.js b/src/serviceproviders/owncast.js new file mode 100644 index 0000000..1e46f2c --- /dev/null +++ b/src/serviceproviders/owncast.js @@ -0,0 +1,74 @@ +/* +Copyright 2020 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 bent = require('bent') +const req = bent('GET') + +const reURI = /^https:\/\/(.*)/ + +const processURI = (uri, opts) => { + if (!opts) { + opts = {} + } + const match = uri.match(reURI) + + return { + serviceprovider: { + type: 'web', + name: 'owncast', + }, + profile: { + display: match[1], + uri: uri, + qr: null, + }, + proof: { + uri: `${uri}/api/config`, + fetch: null, + useProxy: false, + format: 'json', + }, + claim: { + fingerprint: null, + format: 'fingerprint', + path: ['socialHandles', 'url'], + relation: 'contains', + }, + customRequestHandler: null, + } +} + +const tests = [ + { + uri: 'https://live.domain.org', + shouldMatch: true, + }, + { + uri: 'https://live.domain.org/', + shouldMatch: true, + }, + { + uri: 'https://domain.org/live', + shouldMatch: true, + }, + { + uri: 'https://domain.org/live/', + shouldMatch: true, + }, +] + +exports.reURI = reURI +exports.processURI = processURI +exports.tests = tests