| 
									
										
										
										
											2019-02-18 19:32:49 +00:00
										 |  |  | const githubRegex = /github/i; | 
					
						
							| 
									
										
										
										
											2015-08-21 16:08:49 -07:00
										 |  |  | const providerHash = { | 
					
						
							|  |  |  |   facebook: ({ id }) => id, | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  |   github: ({ username }) => username, | 
					
						
							| 
									
										
										
										
											2015-08-21 16:08:49 -07:00
										 |  |  |   twitter: ({ username }) => username, | 
					
						
							|  |  |  |   linkedin({ _json }) { | 
					
						
							| 
									
										
										
										
											2019-02-18 19:32:49 +00:00
										 |  |  |     return (_json && _json.publicProfileUrl) || null; | 
					
						
							| 
									
										
										
										
											2015-08-21 16:08:49 -07:00
										 |  |  |   }, | 
					
						
							|  |  |  |   google: ({ id }) => id | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function getUsernameFromProvider(provider, profile) { | 
					
						
							| 
									
										
										
										
											2019-02-18 19:32:49 +00:00
										 |  |  |   return typeof providerHash[provider] === 'function' | 
					
						
							|  |  |  |     ? providerHash[provider](profile) | 
					
						
							|  |  |  |     : null; | 
					
						
							| 
									
										
										
										
											2015-08-21 16:08:49 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  | // 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 { | 
					
						
							| 
									
										
										
										
											2018-05-15 14:56:26 +01:00
										 |  |  |     profileUrl: githubProfile, | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  |     username, | 
					
						
							| 
									
										
										
										
											2019-02-18 19:32:49 +00:00
										 |  |  |     _json: { avatar_url: picture, blog: website, location, bio, name } = {} | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  |   } = profile; | 
					
						
							|  |  |  |   return { | 
					
						
							|  |  |  |     name, | 
					
						
							|  |  |  |     username: username.toLowerCase(), | 
					
						
							|  |  |  |     location, | 
					
						
							|  |  |  |     bio, | 
					
						
							|  |  |  |     website, | 
					
						
							|  |  |  |     picture, | 
					
						
							| 
									
										
										
										
											2018-05-15 14:56:26 +01:00
										 |  |  |     githubProfile | 
					
						
							| 
									
										
										
										
											2017-07-13 11:39:07 -07:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2015-08-12 12:15:19 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-08-12 19:08:05 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function getSocialProvider(provider) { | 
					
						
							|  |  |  |   return provider.split('-')[0]; | 
					
						
							|  |  |  | } |