|
|
|
@ -351,6 +351,7 @@ func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
|
|
|
|
|
if head == nil || balance == nil { |
|
|
|
|
// Report the faucet offline until initial stats are ready
|
|
|
|
|
//lint:ignore ST1005 This error is to be displayed in the browser
|
|
|
|
|
if err = sendError(conn, errors.New("Faucet offline")); err != nil { |
|
|
|
|
log.Warn("Failed to send faucet error to client", "err", err) |
|
|
|
|
return |
|
|
|
@ -392,6 +393,7 @@ func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
if msg.Tier >= uint(*tiersFlag) { |
|
|
|
|
//lint:ignore ST1005 This error is to be displayed in the browser
|
|
|
|
|
if err = sendError(conn, errors.New("Invalid funding tier requested")); err != nil { |
|
|
|
|
log.Warn("Failed to send tier error to client", "err", err) |
|
|
|
|
return |
|
|
|
@ -429,6 +431,7 @@ func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
} |
|
|
|
|
if !result.Success { |
|
|
|
|
log.Warn("Captcha verification failed", "err", string(result.Errors)) |
|
|
|
|
//lint:ignore ST1005 it's funny and the robot won't mind
|
|
|
|
|
if err = sendError(conn, errors.New("Beep-bop, you're a robot!")); err != nil { |
|
|
|
|
log.Warn("Failed to send captcha failure to client", "err", err) |
|
|
|
|
return |
|
|
|
@ -450,6 +453,7 @@ func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
} |
|
|
|
|
continue |
|
|
|
|
case strings.HasPrefix(msg.URL, "https://plus.google.com/"): |
|
|
|
|
//lint:ignore ST1005 Google is a company name and should be capitalized.
|
|
|
|
|
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 |
|
|
|
@ -462,6 +466,7 @@ func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
case *noauthFlag: |
|
|
|
|
username, avatar, address, err = authNoAuth(msg.URL) |
|
|
|
|
default: |
|
|
|
|
//lint:ignore ST1005 This error is to be displayed in the browser
|
|
|
|
|
err = errors.New("Something funky happened, please open an issue at https://github.com/ethereum/go-ethereum/issues") |
|
|
|
|
} |
|
|
|
|
if err != nil { |
|
|
|
@ -520,7 +525,7 @@ func (f *faucet) apiHandler(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
|
|
|
|
|
// Send an error if too frequent funding, othewise a success
|
|
|
|
|
if !fund { |
|
|
|
|
if err = sendError(conn, fmt.Errorf("%s left until next allowance", common.PrettyDuration(timeout.Sub(time.Now())))); err != nil { // nolint: gosimple
|
|
|
|
|
if err = sendError(conn, fmt.Errorf("%s left until next allowance", common.PrettyDuration(time.Until(timeout)))); err != nil { // nolint: gosimple
|
|
|
|
|
log.Warn("Failed to send funding error to client", "err", err) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
@ -682,6 +687,7 @@ func authTwitter(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] != "status" { |
|
|
|
|
//lint:ignore ST1005 This error is to be displayed in the browser
|
|
|
|
|
return "", "", common.Address{}, errors.New("Invalid Twitter status URL") |
|
|
|
|
} |
|
|
|
|
// Twitter's API isn't really friendly with direct links. Still, we don't
|
|
|
|
@ -696,6 +702,7 @@ func authTwitter(url string) (string, string, common.Address, error) { |
|
|
|
|
// Resolve the username from the final redirect, no intermediate junk
|
|
|
|
|
parts = strings.Split(res.Request.URL.String(), "/") |
|
|
|
|
if len(parts) < 4 || parts[len(parts)-2] != "status" { |
|
|
|
|
//lint:ignore ST1005 This error is to be displayed in the browser
|
|
|
|
|
return "", "", common.Address{}, errors.New("Invalid Twitter status URL") |
|
|
|
|
} |
|
|
|
|
username := parts[len(parts)-3] |
|
|
|
@ -706,6 +713,7 @@ func authTwitter(url string) (string, string, common.Address, error) { |
|
|
|
|
} |
|
|
|
|
address := common.HexToAddress(string(regexp.MustCompile("0x[0-9a-fA-F]{40}").Find(body))) |
|
|
|
|
if address == (common.Address{}) { |
|
|
|
|
//lint:ignore ST1005 This error is to be displayed in the browser
|
|
|
|
|
return "", "", common.Address{}, errors.New("No Ethereum address found to fund") |
|
|
|
|
} |
|
|
|
|
var avatar string |
|
|
|
@ -721,6 +729,7 @@ func authFacebook(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" { |
|
|
|
|
//lint:ignore ST1005 This error is to be displayed in the browser
|
|
|
|
|
return "", "", common.Address{}, errors.New("Invalid Facebook post URL") |
|
|
|
|
} |
|
|
|
|
username := parts[len(parts)-3] |
|
|
|
@ -740,6 +749,7 @@ func authFacebook(url string) (string, string, common.Address, error) { |
|
|
|
|
} |
|
|
|
|
address := common.HexToAddress(string(regexp.MustCompile("0x[0-9a-fA-F]{40}").Find(body))) |
|
|
|
|
if address == (common.Address{}) { |
|
|
|
|
//lint:ignore ST1005 This error is to be displayed in the browser
|
|
|
|
|
return "", "", common.Address{}, errors.New("No Ethereum address found to fund") |
|
|
|
|
} |
|
|
|
|
var avatar string |
|
|
|
@ -755,6 +765,7 @@ func authFacebook(url string) (string, string, common.Address, error) { |
|
|
|
|
func authNoAuth(url string) (string, string, common.Address, error) { |
|
|
|
|
address := common.HexToAddress(regexp.MustCompile("0x[0-9a-fA-F]{40}").FindString(url)) |
|
|
|
|
if address == (common.Address{}) { |
|
|
|
|
//lint:ignore ST1005 This error is to be displayed in the browser
|
|
|
|
|
return "", "", common.Address{}, errors.New("No Ethereum address found to fund") |
|
|
|
|
} |
|
|
|
|
return address.Hex() + "@noauth", "", address, nil |
|
|
|
|