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