Files
shields/services/keybase/keybase-profile.js
Skyper 6bfa9b1b41 Add badges for [Keybase] (#2969)
* Add Keybase PGP badge

* Return 'not found' if the key is not present

* Change the default colour

* Add more constraints to the schema

* Render 64-bit fingerprints

* Add example

* Add a 'hex()' constraint to the fingerprint

* Improve error handling

* Add class 'KeybaseProfile'

* Add unit tests for Keybase PGP

* Add Keybase BTC

* Add unit tests for Keybase BTC

* Add Keybase ZEC

* Add unit tests for Keybase ZEC

* Add Keybase XLM

* Add unit tests for Keybase XLM

* Validate the BTC address using a regex

Regex taken from
https://mokagio.github.io/tech-journal/2014/11/21/regex-bitcoin.html.

* Exclude 'not found' from addresses' value in unit tests

* Remove useless keywords

* Add the link to the Keybase API documentation

* Move the colour into 'defaultBadgeData'

* Remove the HTTP method

'GET' is already the default one.

* Improve the error handling for Keybase BTC

* Add more constraints to the Keybase BTC schema

* Update one unit test for Keybase BTC

* Fix the error handling for Keybase BTC

* Add more unit tests for Keybase BTC

* Improve the error handling for Keybase ZEC

* Improve the error handling for Keybase PGP

* Improve the error handling for Keybase XLM

* Display a real username value in the examples

* Include the status code in the schemas

* Move the category to the base class

The same category is used by all badges.

* Add function 'transform' to the base class

The function 'transform' is used to encapsulate the error handling logic
as it is the same in each service.
2019-02-15 11:33:06 -06:00

39 lines
911 B
JavaScript

'use strict'
const { BaseJsonService } = require('..')
const { NotFound } = require('..')
module.exports = class KeybaseProfile extends BaseJsonService {
static get apiVersion() {
throw new Error(`apiVersion() is not implemented for ${this.name}`)
}
static get category() {
return 'social'
}
async fetch({ schema, options }) {
const apiVersion = this.constructor.apiVersion
// See https://keybase.io/docs/api/1.0/call/user/lookup.
const url = `https://keybase.io/_/api/${apiVersion}/user/lookup.json`
return this._requestJson({
url,
schema,
options,
})
}
transform({ data }) {
if (data.status.code !== 0) {
throw new NotFound({ prettyMessage: 'invalid username' })
}
if (data.them.length === 0 || !data.them[0]) {
throw new NotFound({ prettyMessage: 'profile not found' })
}
return { user: data.them[0] }
}
}