package goscrobble import ( "database/sql" "errors" "time" ) type OauthToken struct { UserUUID string `json:"user"` Service string `json:"service"` AccessToken string `json:"access_token"` RefreshToken string `json:"refresh_token"` Expiry time.Time `json:"expiry"` Username string `json:"username"` LastSynced time.Time `json:"last_synced"` URL string `json:"url"` } func getOauthToken(userUuid string, service string) (OauthToken, error) { var oauth OauthToken err := db.QueryRow("SELECT BIN_TO_UUID(`user`, true), `service`, `access_token`, `refresh_token`, `expiry`, `username`, `last_synced`, `url` FROM `oauth_tokens` "+ "WHERE `user` = UUID_TO_BIN(?, true) AND `service` = ?", userUuid, service).Scan(&oauth.UserUUID, &oauth.Service, &oauth.AccessToken, &oauth.RefreshToken, &oauth.Expiry, &oauth.Username, &oauth.LastSynced, &oauth.URL) if err == sql.ErrNoRows { return oauth, errors.New("No token for user") } return oauth, nil } func insertOauthToken(userUuid string, service string, token string, refresh string, expiry time.Time, username string, lastSynced time.Time, url string) error { _, err := db.Exec("REPLACE INTO `oauth_tokens` (`user`, `service`, `access_token`, `refresh_token`, `expiry`, `username`, `last_synced`, `url`) "+ "VALUES (UUID_TO_BIN(?, true),?,?,?,?,?,?,?)", userUuid, service, token, refresh, expiry, username, lastSynced, url) return err } func removeOauthToken(userUuid string, service string) error { _, err := db.Exec("DELETE FROM `oauth_tokens` WHERE `user` = UUID_TO_BIN(?, true) AND `service` = ?", userUuid, service) return err }