50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { AvatarService } from './avatar.service';
|
|
import { Injectable, Inject } from 'ng-metadata/core';
|
|
|
|
|
|
@Injectable(AvatarService.name)
|
|
export class AvatarServiceImpl implements AvatarService {
|
|
|
|
private cache: {[cacheKey: string]: string} = {};
|
|
|
|
constructor(@Inject('Config') private Config: any,
|
|
@Inject('md5') private md5: any) {
|
|
|
|
}
|
|
|
|
public getAvatar(hash: string, size: number = 16, notFound: string = '404'): string {
|
|
var avatarURL: string;
|
|
switch (this.Config['AVATAR_KIND']) {
|
|
case 'local':
|
|
avatarURL = `/avatar/${hash}?size=${size}`;
|
|
break;
|
|
|
|
case 'gravatar':
|
|
avatarURL = `//www.gravatar.com/avatar/${hash}?d=${notFound}&size=${size}`;
|
|
break;
|
|
}
|
|
|
|
return avatarURL;
|
|
}
|
|
|
|
public computeHash(email: string = '', name: string = ''): string {
|
|
const cacheKey: string = email + ':' + name;
|
|
|
|
if (this.cache[cacheKey]) {
|
|
return this.cache[cacheKey];
|
|
}
|
|
|
|
var hash: string = this.md5.createHash(email.toString().toLowerCase());
|
|
switch (this.Config['AVATAR_KIND']) {
|
|
case 'local':
|
|
if (name) {
|
|
hash = name[0] + hash;
|
|
} else if (email) {
|
|
hash = email[0] + hash;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return this.cache[cacheKey] = hash;
|
|
}
|
|
}
|