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];
 | |
| }
 |