Skip to content

Commit

Permalink
fix(SSO): メールアドレスからコメント・タグを除外 (#544)
Browse files Browse the repository at this point in the history
  • Loading branch information
u1-liquid authored Mar 20, 2024
1 parent daf297c commit c45edf2
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 19 deletions.
5 changes: 5 additions & 0 deletions packages/backend/src/misc/normalize-email-address.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const specialCharactersRegexp = /(\(.*?\)|(\+.*(?=@)))/gu;

export function normalizeEmailAddress(email: string | null): string | null {
return email?.replaceAll(specialCharactersRegexp, '') ?? null;
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import type { MiLocalUser } from '@/models/User.js';
import { CacheService } from '@/core/CacheService.js';
import { LoggerService } from '@/core/LoggerService.js';
import { RoleService } from '@/core/RoleService.js';
import { normalizeEmailAddress } from '@/misc/normalize-email-address.js';
import type { FastifyInstance } from 'fastify';

@Injectable()
Expand Down Expand Up @@ -175,7 +176,7 @@ export class JWTIdentifyProviderService {
preferred_username: user.username,
profile: `${this.config.url}/@${user.username}`,
picture: user.avatarUrl ?? undefined,
email: profile.emailVerified ? profile.email : undefined,
email: profile.emailVerified ? normalizeEmailAddress(profile.email) : undefined,
email_verified: profile.emailVerified,
mfa_enabled: profile.twoFactorEnabled,
updated_at: Math.floor((user.updatedAt?.getTime() ?? user.createdAt.getTime()) / 1000),
Expand Down
27 changes: 9 additions & 18 deletions packages/backend/src/server/sso/SAMLIdentifyProviderService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import { RoleService } from '@/core/RoleService.js';
import type { MiLocalUser } from '@/models/User.js';
import { bindThis } from '@/decorators.js';
import { DI } from '@/di-symbols.js';
import { normalizeEmailAddress } from '@/misc/normalize-email-address.js';
import type { FastifyInstance } from 'fastify';

@Injectable()
Expand Down Expand Up @@ -440,7 +441,7 @@ export class SAMLIdentifyProviderService {
},
'saml:Subject': {
'saml:NameID': profile.emailVerified
? { '@Format': 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress', '#text': profile.email }
? { '@Format': 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress', '#text': normalizeEmailAddress(profile.email) }
: { '@Format': 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', '#text': user.id },
'saml:SubjectConfirmation': {
'@Method': 'urn:oasis:names:tc:SAML:2.0:cm:bearer',
Expand Down Expand Up @@ -531,24 +532,14 @@ export class SAMLIdentifyProviderService {
'#text': user.avatarUrl,
},
}] : []),
...(profile.emailVerified ? [
{
'@Name': 'mail',
'@NameFormat': 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic',
'saml:AttributeValue': {
'@xsi:type': 'xs:string',
'#text': profile.email,
},
},
{
'@Name': 'email',
'@NameFormat': 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic',
'saml:AttributeValue': {
'@xsi:type': 'xs:string',
'#text': profile.email,
},
...(profile.emailVerified ? [{
'@Name': 'email',
'@NameFormat': 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic',
'saml:AttributeValue': {
'@xsi:type': 'xs:string',
'#text': normalizeEmailAddress(profile.email),
},
] : []),
}] : []),
{
'@Name': 'email_verified',
'@NameFormat': 'urn:oasis:names:tc:SAML:2.0:attrname-format:basic',
Expand Down

0 comments on commit c45edf2

Please sign in to comment.