Skip to content

Commit 763479b

Browse files
authored
Merge pull request #803 from SISheogorath/fix/letterAvatarCSP
Move letter-avatars into own request
2 parents 43fa5cf + 69aed93 commit 763479b

3 files changed

Lines changed: 23 additions & 11 deletions

File tree

lib/letter-avatars.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
'use strict'
22
// external modules
3-
var randomcolor = require('randomcolor')
3+
const randomcolor = require('randomcolor')
4+
const config = require('./config')
45

56
// core
6-
module.exports = function (name) {
7-
var color = randomcolor({
7+
exports.generateAvatar = function (name) {
8+
const color = randomcolor({
89
seed: name,
910
luminosity: 'dark'
1011
})
11-
var letter = name.substring(0, 1).toUpperCase()
12+
const letter = name.substring(0, 1).toUpperCase()
1213

13-
var svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
14+
let svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
1415
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">'
1516
svg += '<g>'
1617
svg += '<rect width="96" height="96" fill="' + color + '" />'
@@ -20,5 +21,9 @@ module.exports = function (name) {
2021
svg += '</g>'
2122
svg += '</svg>'
2223

23-
return 'data:image/svg+xml;base64,' + new Buffer(svg).toString('base64')
24+
return svg
25+
}
26+
27+
exports.generateAvatarURL = function (name) {
28+
return config.serverURL + '/user/' + name + '/avatar.svg'
2429
}

lib/models/user.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var scrypt = require('scrypt')
66

77
// core
88
var logger = require('../logger')
9-
var letterAvatars = require('../letter-avatars')
9+
var {generateAvatarURL} = require('../letter-avatars')
1010

1111
module.exports = function (sequelize, DataTypes) {
1212
var User = sequelize.define('User', {
@@ -108,7 +108,7 @@ module.exports = function (sequelize, DataTypes) {
108108
if (bigger) photo = photo.replace(/(\?s=)\d*$/i, '$1400')
109109
else photo = photo.replace(/(\?s=)\d*$/i, '$196')
110110
} else {
111-
photo = letterAvatars(profile.username)
111+
photo = generateAvatarURL(profile.username)
112112
}
113113
break
114114
case 'mattermost':
@@ -117,7 +117,7 @@ module.exports = function (sequelize, DataTypes) {
117117
if (bigger) photo = photo.replace(/(\?s=)\d*$/i, '$1400')
118118
else photo = photo.replace(/(\?s=)\d*$/i, '$196')
119119
} else {
120-
photo = letterAvatars(profile.username)
120+
photo = generateAvatarURL(profile.username)
121121
}
122122
break
123123
case 'dropbox':
@@ -140,7 +140,7 @@ module.exports = function (sequelize, DataTypes) {
140140
if (bigger) photo += '?s=400'
141141
else photo += '?s=96'
142142
} else {
143-
photo = letterAvatars(profile.username)
143+
photo = generateAvatarURL(profile.username)
144144
}
145145
break
146146
case 'saml':
@@ -149,7 +149,7 @@ module.exports = function (sequelize, DataTypes) {
149149
if (bigger) photo += '?s=400'
150150
else photo += '?s=96'
151151
} else {
152-
photo = letterAvatars(profile.username)
152+
photo = generateAvatarURL(profile.username)
153153
}
154154
break
155155
}

lib/web/userRouter.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const Router = require('express').Router
55
const response = require('../response')
66
const models = require('../models')
77
const logger = require('../logger')
8+
const {generateAvatar} = require('../letter-avatars')
89

910
const UserRouter = module.exports = Router()
1011

@@ -34,3 +35,9 @@ UserRouter.get('/me', function (req, res) {
3435
})
3536
}
3637
})
38+
39+
UserRouter.get('/user/:username/avatar.svg', function (req, res, next) {
40+
res.setHeader('Content-Type', 'image/svg+xml')
41+
res.setHeader('Cache-Control', 'public, max-age=86400')
42+
res.send(generateAvatar(req.params.username))
43+
})

0 commit comments

Comments
 (0)