Skip to content
Snippets Groups Projects
Select Git revision
  • b25df2465640c206fc28f6e40d0ee9c3430e27b3
  • live_exam_os_ubuntu default protected
2 results

login.go

Blame
  • 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)
    	}
    }