a5133e0f9b
Since libravatar got a default fallback to Gravatar and in generell allows federated image hosting for avatars this shouldn't break any existing implementations. The federation functionality is not added yet. This would require to use the libravatar library. Details: https://wiki.libravatar.org/api/ Signed-off-by: Sheogorath <sheogorath@shivering-isles.com>
50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
'use strict'
|
|
// external modules
|
|
const crypto = require('crypto')
|
|
const randomcolor = require('randomcolor')
|
|
const config = require('./config')
|
|
|
|
// core
|
|
exports.generateAvatar = function (name) {
|
|
const color = randomcolor({
|
|
seed: name,
|
|
luminosity: 'dark'
|
|
})
|
|
const letter = name.substring(0, 1).toUpperCase()
|
|
|
|
let svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
|
|
svg += '<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="96" width="96" version="1.1" viewBox="0 0 96 96">'
|
|
svg += '<g>'
|
|
svg += '<rect width="96" height="96" fill="' + color + '" />'
|
|
svg += '<text font-size="64px" font-family="sans-serif" text-anchor="middle" fill="#ffffff">'
|
|
svg += '<tspan x="48" y="72" stroke-width=".26458px" fill="#ffffff">' + letter + '</tspan>'
|
|
svg += '</text>'
|
|
svg += '</g>'
|
|
svg += '</svg>'
|
|
|
|
return svg
|
|
}
|
|
|
|
exports.generateAvatarURL = function (name, email = '', big = true) {
|
|
let photo
|
|
if (typeof email !== 'string') {
|
|
email = '' + name + '@example.com'
|
|
}
|
|
name=encodeURIComponent(name)
|
|
|
|
let hash = crypto.createHash('md5')
|
|
hash.update(email.toLowerCase())
|
|
let hexDigest = hash.digest('hex')
|
|
|
|
if (email !== '' && config.allowGravatar) {
|
|
photo = 'https://cdn.libravatar.org/avatar/' + hexDigest;
|
|
if (big) {
|
|
photo += '?s=400'
|
|
} else {
|
|
photo += '?s=96'
|
|
}
|
|
} else {
|
|
photo = config.serverURL + '/user/' + (name || email.substring(0, email.lastIndexOf('@')) || hexDigest) + '/avatar.svg'
|
|
}
|
|
return photo
|
|
}
|