cmd/faucet: sunset Google+ authentication
This commit is contained in:
		
							parent
							
								
									9454508b23
								
							
						
					
					
						commit
						ab10c15578
					
				| @ -445,10 +445,14 @@ func (f *faucet) apiHandler(conn *websocket.Conn) { | ||||
| 				return | ||||
| 			} | ||||
| 			continue | ||||
| 		case strings.HasPrefix(msg.URL, "https://plus.google.com/"): | ||||
| 			if err = sendError(conn, errors.New("Google+ authentication discontinued as the service was sunset")); err != nil { | ||||
| 				log.Warn("Failed to send Google+ deprecation to client", "err", err) | ||||
| 				return | ||||
| 			} | ||||
| 			continue | ||||
| 		case strings.HasPrefix(msg.URL, "https://twitter.com/"): | ||||
| 			username, avatar, address, err = authTwitter(msg.URL) | ||||
| 		case strings.HasPrefix(msg.URL, "https://plus.google.com/"): | ||||
| 			username, avatar, address, err = authGooglePlus(msg.URL) | ||||
| 		case strings.HasPrefix(msg.URL, "https://www.facebook.com/"): | ||||
| 			username, avatar, address, err = authFacebook(msg.URL) | ||||
| 		case *noauthFlag: | ||||
| @ -704,40 +708,6 @@ func authTwitter(url string) (string, string, common.Address, error) { | ||||
| 	return username + "@twitter", avatar, address, nil | ||||
| } | ||||
| 
 | ||||
| // authGooglePlus tries to authenticate a faucet request using GooglePlus posts,
 | ||||
| // returning the username, avatar URL and Ethereum address to fund on success.
 | ||||
| func authGooglePlus(url string) (string, string, common.Address, error) { | ||||
| 	// Ensure the user specified a meaningful URL, no fancy nonsense
 | ||||
| 	parts := strings.Split(url, "/") | ||||
| 	if len(parts) < 4 || parts[len(parts)-2] != "posts" { | ||||
| 		return "", "", common.Address{}, errors.New("Invalid Google+ post URL") | ||||
| 	} | ||||
| 	username := parts[len(parts)-3] | ||||
| 
 | ||||
| 	// Google's API isn't really friendly with direct links. Still, we don't
 | ||||
| 	// want to do ask read permissions from users, so just load the public posts and
 | ||||
| 	// scrape it for the Ethereum address and profile URL.
 | ||||
| 	res, err := http.Get(url) | ||||
| 	if err != nil { | ||||
| 		return "", "", common.Address{}, err | ||||
| 	} | ||||
| 	defer res.Body.Close() | ||||
| 
 | ||||
| 	body, err := ioutil.ReadAll(res.Body) | ||||
| 	if err != nil { | ||||
| 		return "", "", common.Address{}, err | ||||
| 	} | ||||
| 	address := common.HexToAddress(string(regexp.MustCompile("0x[0-9a-fA-F]{40}").Find(body))) | ||||
| 	if address == (common.Address{}) { | ||||
| 		return "", "", common.Address{}, errors.New("No Ethereum address found to fund") | ||||
| 	} | ||||
| 	var avatar string | ||||
| 	if parts = regexp.MustCompile("src=\"([^\"]+googleusercontent.com[^\"]+photo.jpg)\"").FindStringSubmatch(string(body)); len(parts) == 2 { | ||||
| 		avatar = parts[1] | ||||
| 	} | ||||
| 	return username + "@google+", avatar, address, nil | ||||
| } | ||||
| 
 | ||||
| // authFacebook tries to authenticate a faucet request using Facebook posts,
 | ||||
| // returning the username, avatar URL and Ethereum address to fund on success.
 | ||||
| func authFacebook(url string) (string, string, common.Address, error) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user