57 lines
1.3 KiB
JavaScript
57 lines
1.3 KiB
JavaScript
const githubRegex = (/github/i);
|
|
const providerHash = {
|
|
facebook: ({ id }) => id,
|
|
github: ({ username }) => username,
|
|
twitter: ({ username }) => username,
|
|
linkedin({ _json }) {
|
|
return _json && _json.publicProfileUrl || null;
|
|
},
|
|
google: ({ id }) => id
|
|
};
|
|
|
|
export function getUsernameFromProvider(provider, profile) {
|
|
return typeof providerHash[provider] === 'function' ?
|
|
providerHash[provider](profile) :
|
|
null;
|
|
}
|
|
|
|
// createProfileAttributes(provider: String, profile: {}) => Object
|
|
export function createUserUpdatesFromProfile(provider, profile) {
|
|
if (githubRegex.test(provider)) {
|
|
return createProfileAttributesFromGithub(profile);
|
|
}
|
|
return {
|
|
[getSocialProvider(provider)]: getUsernameFromProvider(
|
|
getSocialProvider(provider),
|
|
profile
|
|
)
|
|
};
|
|
}
|
|
// createProfileAttributes(profile) => profileUpdate
|
|
function createProfileAttributesFromGithub(profile) {
|
|
const {
|
|
profileUrl: githubProfile,
|
|
username,
|
|
_json: {
|
|
avatar_url: picture,
|
|
blog: website,
|
|
location,
|
|
bio,
|
|
name
|
|
} = {}
|
|
} = profile;
|
|
return {
|
|
name,
|
|
username: username.toLowerCase(),
|
|
location,
|
|
bio,
|
|
website,
|
|
picture,
|
|
githubProfile
|
|
};
|
|
}
|
|
|
|
export function getSocialProvider(provider) {
|
|
return provider.split('-')[0];
|
|
}
|