The usage of identicons makes users more distinguishable as when only the default librvatar image is used. This only applies to users that have no avatar on libravatar or gravatar. Signed-off-by: Erik Michelson <github@erik.michelson.eu>
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 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)
 | |
| 
 | |
|   const hash = crypto.createHash('md5')
 | |
|   hash.update(email.toLowerCase())
 | |
|   const hexDigest = hash.digest('hex')
 | |
| 
 | |
|   if (email !== '' && config.allowGravatar) {
 | |
|     photo = `https://cdn.libravatar.org/avatar/${hexDigest}?default=identicon`
 | |
|     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
 | |
| }
 |