+
Skip to content

users: Split from user package #139

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Sep 17, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions request/twitter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ func TestTwitter(t *testing.T) {

func TestTwitterRedirect(t *testing.T) {
req := request.NewHTTPRequestor()
// Redirect (from lowercase) to /Boboloblaws/status/1276948233915207680 is ok
urs := "https://mobile.twitter.com/boboloblaws/status/1276948233915207680"
// Redirect (from lowercase) to /Boboloblaws/status/1306608574257197058 is ok
urs := "https://mobile.twitter.com/boboloblaws/status/1306608574257197058"
res, err := req.RequestURLString(context.TODO(), urs)
require.NoError(t, err)
out, brand := encoding.FindSaltpack(string(res), true)
require.Equal(t, "fOT1ZDzPbT8yCx3eTu16VZBkcU2YuYnl5YGxpbOvSEMOc84RdH5misz4SOFDPsDKTMCerICVBF2RXcSmvRfjCZTCKq6Xr2MZHgg4N95u0vFmKKWAQGem19QxSORCCZNXsRq8v6WKe2SvFy1odL0Xm2VIeNebn4c9xjJwYTBKNKRtSmijNnmAqBjs61S48Vwrjlx67QFSowDMw9jZhAf0i992BwmNTeOh3", out)
require.Equal(t, "Y8Rk7O43uVYNtOFT3e1VBj8PYoopsALmaIKmY7xPlHTQLRVzZuq7T21t7gh5hkcwWzDn4tOGVbuKYg7qzIvzSQTCKq6Xr2MZHgg702h9QYi2QPylekc6hgqBIuxIzo9V4PTT6y5dakSFOgwtjBEgO3JDRSAcmA9ILQuPDUFYbmAZPti6SXkYku6v0X3IpV4aoEmdOi8RotFfpxttDvoSraB2BwmNTeOh3", out)
require.Equal(t, "", brand)

// Tweet ID from different user, should not redirect
Expand Down
2 changes: 1 addition & 1 deletion user/echo.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func echoRequest(ur *url.URL) ([]byte, error) {
Name: username,
}

if err := Verify(msg, usr); err != nil {
if err := usr.Verify(msg); err != nil {
return nil, err
}

Expand Down
37 changes: 0 additions & 37 deletions user/options.go

This file was deleted.

119 changes: 0 additions & 119 deletions user/request.go

This file was deleted.

6 changes: 1 addition & 5 deletions user/request_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@ package user_test
import (
"context"
"testing"
"time"

"github.com/keys-pub/keys/request"

"github.com/keys-pub/keys"
"github.com/keys-pub/keys/user"
Expand All @@ -15,10 +12,9 @@ import (
func TestMyTwitter(t *testing.T) {
kid := keys.ID("kex1e26rq9vrhjzyxhep0c5ly6rudq7m2cexjlkgknl2z4lqf8ga3uasz3s48m")
urs := "https://twitter.com/gabrlh/status/1222706272849391616"
req := request.NewHTTPRequestor()

usr, err := user.New(kid, "twitter", "gabrlh", urs, 1)
require.NoError(t, err)
result := user.RequestVerify(context.TODO(), req, usr, time.Now())
result := usr.RequestVerify(context.TODO())
require.Equal(t, user.StatusOK, result.Status)
}
89 changes: 83 additions & 6 deletions user/result.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package user

import (
"context"
"fmt"
"net/url"
"time"

"github.com/keys-pub/keys"
"github.com/keys-pub/keys/link"
"github.com/keys-pub/keys/request"
"github.com/keys-pub/keys/tsutil"
"github.com/pkg/errors"
)

// Result describes the status of a User.
Expand All @@ -20,11 +24,6 @@ type Result struct {
VerifiedAt int64 `json:"vts"`
}

type keyDocument struct {
KID keys.ID `json:"kid"`
Result *Result `json:"result,omitempty"`
}

func (r Result) String() string {
if r.Status == StatusOK {
return fmt.Sprintf("%s:%s(%d)", r.Status, r.User, r.VerifiedAt)
Expand All @@ -43,3 +42,81 @@ func (r Result) IsVerifyExpired(now time.Time, dt time.Duration) bool {
ts := tsutil.ConvertMillis(r.VerifiedAt)
return (ts.IsZero() || now.Sub(ts) > dt)
}

// Update result using Requestor.
func (r *Result) Update(ctx context.Context, req request.Requestor, now time.Time) {
logger.Infof("Update user %s", r.User.String())

r.Timestamp = tsutil.Millis(now)

service, err := link.NewService(r.User.Service)
if err != nil {
r.Err = err.Error()
r.Status = StatusFailure
return
}

logger.Debugf("Validate user name: %s, url: %s", r.User.Name, r.User.URL)
urs, err := service.ValidateURLString(r.User.Name, r.User.URL)
if err != nil {
r.Err = err.Error()
r.Status = StatusFailure
return
}

// For test requests
ur, err := url.Parse(urs)
if err != nil {
r.Err = err.Error()
r.Status = StatusFailure
return
}

var body []byte
if ur.Scheme == "test" && ur.Host == "echo" {
logger.Infof("Test echo request %s", urs)
b, err := echoRequest(ur)
if err != nil {
r.Err = err.Error()
r.Status = StatusFailure
return
}
body = b
} else {
logger.Infof("Requesting %s", urs)
b, err := req.RequestURLString(ctx, urs)
if err != nil {
logger.Warningf("Request failed: %v", err)
if errHTTP, ok := errors.Cause(err).(request.ErrHTTP); ok && errHTTP.StatusCode == 404 {
r.Err = err.Error()
r.Status = StatusResourceNotFound
return
}
r.Err = err.Error()
r.Status = StatusConnFailure
return
}
body = b
}

b, err := service.CheckContent(r.User.Name, body)
if err != nil {
logger.Warningf("Failed to check content: %s", err)
r.Err = err.Error()
r.Status = StatusContentInvalid
return
}

st, err := findVerify(r.User, b)
if err != nil {
logger.Warningf("Failed to find and verify: %s", err)
r.Err = err.Error()
r.Status = st
return
}

logger.Infof("Verified %s", r.User.KID)
r.Err = ""
r.Status = StatusOK
r.VerifiedAt = tsutil.Millis(now)
}
Loading
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载