Select Git revision
login.go 1.75 KiB
package cmdLogin
import (
u "nexus-client/utils"
g "nexus-client/globals"
)
import (
"errors"
"encoding/json"
)
type Login struct {
Name string
}
func (cmd *Login)GetName() string {
return cmd.Name
}
func (cmd *Login)GetDesc() []string {
return []string{
"Obtains an access token.",
"Requires no capabilities."}
}
func (cmd *Login)PrintUsage() {
for _, desc := range cmd.GetDesc() {
u.PrintlnErr(desc)
}
u.PrintlnErr("USAGE: "+cmd.Name+" email password")
}
func (cmd *Login)Run(args []string) int {
if len(args) != 2 {
cmd.PrintUsage()
return 1
}
email := args[0]
pwd := args[1]
token, err := GetToken(email, pwd)
if err != nil {
u.PrintlnErr("Error: "+err.Error())
return 1
}
u.Println(token)
return 0
}
// Returns the token if the authentication was successful or an error if it wasn't.
//
// curl -X POST http://localhost:8000/login -H 'Content-Type: application/json' -d '{"email": "johndoe@nexus.org", "pwd":"pipomolo"}'
// Returns a jwt token if authentication was successful:
// {"token":"<jwt token>"}
func GetToken(user string, pwd string) (string, error) {
client := g.GetInstance().Client
host := g.GetInstance().Host
type LoginArgs struct {
Email string
Pwd string
}
loginArgs := &LoginArgs {user, pwd}
resp, err := client.R().SetBody(loginArgs).Post(host+"/login")
if err != nil {
return "", err
}
if resp.IsSuccess() {
type Response struct {
Token string
}
var response Response
err = json.Unmarshal(resp.Body(), &response)
if err != nil {
return "", err
}
return response.Token, nil
} else {
type Response struct {
Message string
}
var response Response
err = json.Unmarshal(resp.Body(), &response)
if err != nil {
return "", err
}
return "", errors.New(response.Message)
}
}