Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions packages/comment-widget/src/avatar/providers/custom.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import AvatarProvider from './avatar-provider';

const seedPlaceholderPattern = /\{(?:hash|seed)\}/;

class CustomAvatar extends AvatarProvider {
override getAvatarSrc(emailHash: string | undefined): string {
const source = this.url.trim();
const seed = encodeURIComponent(emailHash || 'anonymous');

if (!source) {
return '';
}

if (seedPlaceholderPattern.test(source)) {
return source.replace(/\{hash\}/g, seed).replace(/\{seed\}/g, seed);
}

return `${source}${source.includes('?') ? '&' : '?'}_avatar=${seed}`;
}
}

export default new CustomAvatar('Custom', '');
6 changes: 6 additions & 0 deletions packages/comment-widget/src/avatar/providers/index.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
import type AvatarProvider from './avatar-provider';
import Custom from './custom';
import Gravatar from './gravatar';

let avatarProvider: AvatarProvider | undefined;

enum AvatarProviderEnum {
CUSTOM = 'custom',
GRAVATAR = 'gravatar',
}

export function setAvatarProvider(provider: string, mirrorUrl?: string) {
switch (provider) {
case AvatarProviderEnum.CUSTOM:
Custom.url = mirrorUrl || '';
avatarProvider = Custom;
break;
case AvatarProviderEnum.GRAVATAR:
if (mirrorUrl) {
Gravatar.url = mirrorUrl;
Expand Down
2 changes: 1 addition & 1 deletion packages/comment-widget/src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ interface SecurityConfig {
}

interface AvatarConfig {
provider: 'gravatar';
provider: 'custom' | 'gravatar';
enable: boolean;
providerMirror: string;
policy: 'anonymousUser' | 'allUser' | 'noAvatarUser';
Expand Down
4 changes: 3 additions & 1 deletion src/main/resources/extensions/settings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ spec:
if: "$get(enable).value === true"
name: provider
options:
- label: "自定义头像服务"
value: "custom"
- label: "Gravatar"
value: "gravatar"
value: "gravatar"
Expand All @@ -128,7 +130,7 @@ spec:
if: "$get(enable).value === true"
name: providerMirror
value: ""
help: 使用官方源则留空, 示例:https://gravatar.com
help: 自定义头像服务支持 {hash} 或 {seed} 占位符;不填写占位符时会自动追加 _avatar 参数。Gravatar 示例:https://gravatar.com
- $formkit: select
label: 头像策略
if: "$get(enable).value === true"
Expand Down