forked from cerc-io/plugeth
Merge pull request #19539 from karalabe/faucet-updates
cmd/faucet: embed git commit hash/date, disable Google+
This commit is contained in:
commit
c94d582aa7
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user