Merge pull request #19539 from karalabe/faucet-updates
cmd/faucet: embed git commit hash/date, disable Google+
This commit is contained in:
		@@ -88,6 +88,11 @@ var (
 | 
				
			|||||||
	ether = new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil)
 | 
						ether = new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil)
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var (
 | 
				
			||||||
 | 
						gitCommit = "" // Git SHA1 commit hash of the release (set via linker flags)
 | 
				
			||||||
 | 
						gitDate   = "" // Git commit date YYYYMMDD of the release (set via linker flags)
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
	// Parse the flags and set up the logger to print everything requested
 | 
						// Parse the flags and set up the logger to print everything requested
 | 
				
			||||||
	flag.Parse()
 | 
						flag.Parse()
 | 
				
			||||||
@@ -216,7 +221,7 @@ func newFaucet(genesis *core.Genesis, port int, enodes []*discv5.Node, network u
 | 
				
			|||||||
	// Assemble the raw devp2p protocol stack
 | 
						// Assemble the raw devp2p protocol stack
 | 
				
			||||||
	stack, err := node.New(&node.Config{
 | 
						stack, err := node.New(&node.Config{
 | 
				
			||||||
		Name:    "geth",
 | 
							Name:    "geth",
 | 
				
			||||||
		Version: params.VersionWithMeta,
 | 
							Version: params.VersionWithCommit(gitCommit, gitDate),
 | 
				
			||||||
		DataDir: filepath.Join(os.Getenv("HOME"), ".faucet"),
 | 
							DataDir: filepath.Join(os.Getenv("HOME"), ".faucet"),
 | 
				
			||||||
		P2P: p2p.Config{
 | 
							P2P: p2p.Config{
 | 
				
			||||||
			NAT:              nat.Any(),
 | 
								NAT:              nat.Any(),
 | 
				
			||||||
@@ -440,10 +445,14 @@ func (f *faucet) apiHandler(conn *websocket.Conn) {
 | 
				
			|||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			continue
 | 
								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/"):
 | 
							case strings.HasPrefix(msg.URL, "https://twitter.com/"):
 | 
				
			||||||
			username, avatar, address, err = authTwitter(msg.URL)
 | 
								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/"):
 | 
							case strings.HasPrefix(msg.URL, "https://www.facebook.com/"):
 | 
				
			||||||
			username, avatar, address, err = authFacebook(msg.URL)
 | 
								username, avatar, address, err = authFacebook(msg.URL)
 | 
				
			||||||
		case *noauthFlag:
 | 
							case *noauthFlag:
 | 
				
			||||||
@@ -699,40 +708,6 @@ func authTwitter(url string) (string, string, common.Address, error) {
 | 
				
			|||||||
	return username + "@twitter", avatar, address, nil
 | 
						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,
 | 
					// authFacebook tries to authenticate a faucet request using Facebook posts,
 | 
				
			||||||
// returning the username, avatar URL and Ethereum address to fund on success.
 | 
					// returning the username, avatar URL and Ethereum address to fund on success.
 | 
				
			||||||
func authFacebook(url string) (string, string, common.Address, error) {
 | 
					func authFacebook(url string) (string, string, common.Address, error) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user