51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.2 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];
 | 
						|
}
 |