| const jwt = require('jsonwebtoken'); |
| const { logger } = require('@librechat/data-schemas'); |
| const { Strategy: AppleStrategy } = require('passport-apple'); |
| const socialLogin = require('./socialLogin'); |
|
|
| |
| |
| |
| |
| |
| |
| |
| const getProfileDetails = ({ idToken, profile }) => { |
| if (!idToken) { |
| logger.error('idToken is missing'); |
| throw new Error('idToken is missing'); |
| } |
|
|
| const decoded = jwt.decode(idToken); |
|
|
| logger.debug(`Decoded Apple JWT: ${JSON.stringify(decoded, null, 2)}`); |
|
|
| return { |
| email: decoded.email, |
| id: decoded.sub, |
| avatarUrl: null, |
| username: decoded.email ? decoded.email.split('@')[0].toLowerCase() : `user_${decoded.sub}`, |
| name: decoded.name |
| ? `${decoded.name.firstName} ${decoded.name.lastName}` |
| : profile.displayName || null, |
| emailVerified: true, |
| }; |
| }; |
|
|
| |
| const appleLogin = socialLogin('apple', getProfileDetails); |
|
|
| module.exports = () => |
| new AppleStrategy( |
| { |
| clientID: process.env.APPLE_CLIENT_ID, |
| teamID: process.env.APPLE_TEAM_ID, |
| callbackURL: `${process.env.DOMAIN_SERVER}${process.env.APPLE_CALLBACK_URL}`, |
| keyID: process.env.APPLE_KEY_ID, |
| privateKeyLocation: process.env.APPLE_PRIVATE_KEY_PATH, |
| passReqToCallback: false, |
| }, |
| appleLogin, |
| ); |
|
|