added flag to indicate account is currently syncing
This commit is contained in:
parent
3a6ce5b5e1
commit
b9b79b7994
4 changed files with 24 additions and 16 deletions
|
@ -19,6 +19,7 @@ var stmts = []string{`
|
|||
,user_token VARCHAR(255)
|
||||
,user_admin BOOLEAN
|
||||
,user_active BOOLEAN
|
||||
,user_syncing BOOLEAN
|
||||
,user_created INTEGER
|
||||
,user_updated INTEGER
|
||||
,user_synced INTEGER
|
||||
|
|
8
server/database/testdata/testdata.go
vendored
8
server/database/testdata/testdata.go
vendored
|
@ -7,10 +7,10 @@ import (
|
|||
|
||||
var stmts = []string{
|
||||
// insert user entries
|
||||
"insert into users values (1, 'github.com', 'smellypooper', 'f0b461ca586c27872b43a0685cbc2847', '976f22a5eef7caacb7e678d6c52f49b1', 'Dr. Cooper', 'drcooper@caltech.edu', 'b9015b0857e16ac4d94a0ffd9a0b79c8', 'e42080dddf012c718e476da161d21ad5', 1, 1, 1398065343, 1398065344, 1398065345);",
|
||||
"insert into users values (2, 'github.com', 'lhofstadter', 'e4105c3059ac4c466594932dc9a4ffb2', '2257216903d9cd0d3d24772132febf52', 'Dr. Hofstadter', 'leanard@caltech.edu', '23dde632fdece6880f4ff03bb20f05d7', 'a5ad0d75f317f0b0a5dfdb68e5a3079e', 1, 1, 1398065343, 1398065344, 1398065345);",
|
||||
"insert into users values (3, 'gitlab.com', 'browndynamite', '4821477cc26a0c8c80c6c9b568d98e32', '1dd52c37cf5c63fe5abfd047b5b74a31', 'Dr. Koothrappali', 'rajesh@caltech.edu', 'f9133051f480b7ea88848b9f0a079dae', '7a50ede04637d4a8fce532c7d511226b', 1, 1, 1398065343, 1398065344, 1398065345);",
|
||||
"insert into users values (4, 'github.com', 'mrwolowitz', '1f6a80bde960e6913bf9b7e61eadd068', '74c40472494ba7f9f6c3ae061ff799ed', 'Mr. Wolowitz', 'wolowitz@caltech.edu', 'ea250570c794d84dc583421bb717be82', '3bd7e7d7411b2978e45919c9ad419984', 1, 1, 1398065343, 1398065344, 1398065345);",
|
||||
"insert into users values (1, 'github.com', 'smellypooper', 'f0b461ca586c27872b43a0685cbc2847', '976f22a5eef7caacb7e678d6c52f49b1', 'Dr. Cooper', 'drcooper@caltech.edu', 'b9015b0857e16ac4d94a0ffd9a0b79c8', 'e42080dddf012c718e476da161d21ad5', 1, 1, 0, 1398065343, 1398065344, 1398065345);",
|
||||
"insert into users values (2, 'github.com', 'lhofstadter', 'e4105c3059ac4c466594932dc9a4ffb2', '2257216903d9cd0d3d24772132febf52', 'Dr. Hofstadter', 'leanard@caltech.edu', '23dde632fdece6880f4ff03bb20f05d7', 'a5ad0d75f317f0b0a5dfdb68e5a3079e', 1, 1, 0, 1398065343, 1398065344, 1398065345);",
|
||||
"insert into users values (3, 'gitlab.com', 'browndynamite', '4821477cc26a0c8c80c6c9b568d98e32', '1dd52c37cf5c63fe5abfd047b5b74a31', 'Dr. Koothrappali', 'rajesh@caltech.edu', 'f9133051f480b7ea88848b9f0a079dae', '7a50ede04637d4a8fce532c7d511226b', 1, 1, 0, 1398065343, 1398065344, 1398065345);",
|
||||
"insert into users values (4, 'github.com', 'mrwolowitz', '1f6a80bde960e6913bf9b7e61eadd068', '74c40472494ba7f9f6c3ae061ff799ed', 'Mr. Wolowitz', 'wolowitz@caltech.edu', 'ea250570c794d84dc583421bb717be82', '3bd7e7d7411b2978e45919c9ad419984', 1, 1, 0, 1398065343, 1398065344, 1398065345);",
|
||||
|
||||
// insert repository entries
|
||||
"insert into repos values (1, 0, 'github.com', 'github.com', 'lhofstadter', 'lenwoloppali', '', 'git://github.com/lhofstadter/lenwoloppali.git', '', '', 1, 1, 1, 1, 1, 'publickey', 'privatekey', 'params', 900, 1398065343, 1398065344);",
|
||||
|
|
|
@ -78,6 +78,7 @@ func (h *LoginHandler) GetLogin(w http.ResponseWriter, r *http.Request) error {
|
|||
u.Secret = login.Secret
|
||||
u.Name = login.Name
|
||||
u.SetEmail(login.Email)
|
||||
u.Syncing = u.IsStale()
|
||||
if err := h.users.Update(u); err != nil {
|
||||
return badRequest{err}
|
||||
}
|
||||
|
@ -85,23 +86,21 @@ func (h *LoginHandler) GetLogin(w http.ResponseWriter, r *http.Request) error {
|
|||
// look at the last synchronized date to determine if
|
||||
// we need to re-sync the account.
|
||||
//
|
||||
// TODO this should move to a server/sync package and
|
||||
// should be injected into this struct, just like
|
||||
// the database code.
|
||||
if u.IsStale() {
|
||||
// todo(bradrydzewski) this should move to a server/sync package and
|
||||
// should be injected into this struct, just like the database code.
|
||||
//
|
||||
// todo(bradrydzewski) this login should be a bit more intelligent
|
||||
// than the current implementation.
|
||||
//
|
||||
// todo(bradrydzewski) the github implementation will only sync a
|
||||
// maximum of 100 repositories due to the api pagination. need to fix.
|
||||
if u.Syncing {
|
||||
redirect = "/sync"
|
||||
log.Println("sync user account.", u.Login)
|
||||
|
||||
// sync inside a goroutine. This should eventually be moved to
|
||||
// its own package / sync utility.
|
||||
go func() {
|
||||
// mark as synced
|
||||
u.Synced = time.Now().Unix()
|
||||
if err := h.users.Update(u); err != nil {
|
||||
log.Println("Error syncing user account, updating sync date", u.Login, err)
|
||||
return
|
||||
}
|
||||
|
||||
// list all repositories
|
||||
client := remote.GetClient(u.Access, u.Secret)
|
||||
repos, err := client.GetRepos("")
|
||||
|
@ -132,6 +131,13 @@ func (h *LoginHandler) GetLogin(w http.ResponseWriter, r *http.Request) error {
|
|||
}
|
||||
|
||||
log.Println("Successfully syced repo.", u.Login+"/"+remoteRepo.Name)
|
||||
|
||||
u.Synced = time.Now().Unix()
|
||||
u.Syncing = false
|
||||
if err := h.users.Update(u); err != nil {
|
||||
log.Println("Error syncing user account, updating sync date", u.Login, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
@ -148,7 +154,7 @@ func (h *LoginHandler) GetLogin(w http.ResponseWriter, r *http.Request) error {
|
|||
// GET /logout
|
||||
func (h *LoginHandler) GetLogout(w http.ResponseWriter, r *http.Request) error {
|
||||
h.sess.Clear(w, r)
|
||||
http.Redirect(w, r, "/", http.StatusSeeOther)
|
||||
http.Redirect(w, r, "/login", http.StatusSeeOther)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ type User struct {
|
|||
Token string `meddler:"user_token" json:"-"`
|
||||
Admin bool `meddler:"user_admin" json:"admin"`
|
||||
Active bool `meddler:"user_active" json:"active"`
|
||||
Syncing bool `meddler:"user_syncing" json:"syncing"`
|
||||
Created int64 `meddler:"user_created" json:"created_at"`
|
||||
Updated int64 `meddler:"user_updated" json:"updated_at"`
|
||||
Synced int64 `meddler:"user_synced" json:"synced_at"`
|
||||
|
|
Loading…
Reference in a new issue