Files
fnx_web/pixelapi/user.go
2020-05-05 22:03:34 +02:00

151 lines
5.3 KiB
Go

package pixelapi
import (
"fmt"
"net/url"
"strconv"
)
// UserRegister registers a new user on the Pixeldrain server. username and
// password are always required. email is optional, but without it you will not
// be able to reset your password in case you forget it. captcha depends on
// whether reCaptcha is enabled on the Pixeldrain server, this can be checked
// through the GetRecaptcha function.
//
// The register API can return multiple errors, which will be stored in the
// Errors array. Check for len(Errors) == 0 to see if an error occurred. If err
// != nil it means a connection error occurred
func (p *PixelAPI) UserRegister(username, email, password, captcha string) (err error) {
return p.form(
"POST", p.apiEndpoint+"/user/register",
url.Values{
"username": {username},
"email": {email},
"password": {password},
"recaptcha_response": {captcha},
},
nil, true,
)
}
// Login is the success response to the `user/login` API
type Login struct {
Success bool `json:"success"`
APIKey string `json:"api_key"`
}
// UserLogin logs a user in with the provided credentials. The response will
// contain the returned API key. If saveKey is true the API key will also be
// saved in the client and following requests with this client will be
// autenticated
func (p *PixelAPI) UserLogin(username, password string, saveKey bool) (resp Login, err error) {
var form = url.Values{}
form.Add("username", username)
form.Add("password", password)
if err = p.form("POST", p.apiEndpoint+"/user/login", form, &resp, true); err != nil {
return resp, err
}
if saveKey {
p.APIKey = resp.APIKey
}
return resp, nil
}
// UserInfo contains information about the logged in user
type UserInfo struct {
Success bool `json:"success"`
Username string `json:"username"`
Email string `json:"email"`
}
// UserInfo returns information about the logged in user. Requires an API key
func (p *PixelAPI) UserInfo() (resp UserInfo, err error) {
return resp, p.jsonRequest("GET", p.apiEndpoint+"/user", &resp, false)
}
// UserSessionDestroy destroys an API key so it can no longer be used to perform
// actions
func (p *PixelAPI) UserSessionDestroy(key string) (err error) {
return p.jsonRequest("DELETE", p.apiEndpoint+"/user/session", nil, false)
}
// UserFiles is a list of files uploaded by a user
type UserFiles struct {
Success bool `json:"success"`
Files []FileInfo `json:"files"`
}
// UserFiles gets files uploaded by a user
func (p *PixelAPI) UserFiles(page, limit int) (resp UserFiles, err error) {
return resp, p.jsonRequest(
"GET", fmt.Sprintf("%s/user/files?page=%d&limit=%d", p.apiEndpoint, page, limit), &resp, false,
)
}
// UserLists is a list of lists created by a user
type UserLists struct {
Success bool `json:"success"`
Lists []List `json:"lists"`
}
// UserLists gets lists created by a user
func (p *PixelAPI) UserLists(page, limit int) (resp UserLists, err error) {
return resp, p.jsonRequest(
"GET", fmt.Sprintf("%s/user/lists?page=%d&limit=%d", p.apiEndpoint, page, limit), &resp, false,
)
}
// UserPasswordSet changes the user's password
func (p *PixelAPI) UserPasswordSet(oldPW, newPW string) (err error) {
return p.form(
"PUT", p.apiEndpoint+"/user/password",
url.Values{"old_password": {oldPW}, "new_password": {newPW}}, nil, true,
)
}
// UserEmailReset starts the e-mail change process. An email will be sent to the
// new address to verify that it's real. Once the link in the e-mail is clicked
// the key it contains can be sent to the API with UserEmailResetConfirm and the
// change will be applied
func (p *PixelAPI) UserEmailReset(email string, delete bool) (err error) {
var form = url.Values{}
form.Add("new_email", email)
form.Add("delete", strconv.FormatBool(delete))
return p.form("PUT", p.apiEndpoint+"/user/email_reset", form, nil, true)
}
// UserEmailResetConfirm finishes process of changing a user's e-mail address
func (p *PixelAPI) UserEmailResetConfirm(key string) (err error) {
return p.form(
"PUT", p.apiEndpoint+"/user/email_reset_confirm",
url.Values{"key": {key}}, nil, true,
)
}
// UserPasswordReset starts the password reset process. An email will be sent
// the user to verify that it really wanted to reset the password. Once the link
// in the e-mail is clicked the key it contains can be sent to the API with
// UserPasswordResetConfirm and a new password can be set
func (p *PixelAPI) UserPasswordReset(email string, recaptchaResponse string) (err error) {
var form = url.Values{}
form.Add("email", email)
form.Add("recaptcha_response", recaptchaResponse)
return p.form("PUT", p.apiEndpoint+"/user/password_reset", form, nil, true)
}
// UserPasswordResetConfirm finishes process of resetting a user's password. If
// the key is valid the new_password parameter will be saved as the new password
func (p *PixelAPI) UserPasswordResetConfirm(key string, newPassword string) (err error) {
var form = url.Values{}
form.Add("key", key)
form.Add("new_password", newPassword)
return p.form("PUT", p.apiEndpoint+"/user/password_reset_confirm", form, nil, true)
}
// UserSetUsername changes the user's username.
func (p *PixelAPI) UserSetUsername(username string) (err error) {
var form = url.Values{}
form.Add("new_username", username)
return p.form("PUT", p.apiEndpoint+"/user/username", form, nil, true)
}