Skip to content
Snippets Groups Projects
http.go 1.44 KiB
Newer Older
  • Learn to ignore specific revisions
  • Manuel Kieweg's avatar
    Manuel Kieweg committed
    package cli
    
    import (
    
    	"errors"
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	"fmt"
    	"io/ioutil"
    	"net/http"
    	"strings"
    
    
    	log "github.com/sirupsen/logrus"
    	"github.com/spf13/viper"
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    const apiRoot = "?"
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    
    var builder *strings.Builder
    
    func init() {
    	builder = &strings.Builder{}
    }
    
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    // HTTPGet sends sends requests from the CLI to the gosdn HTTP API and processes any response data
    
    func HTTPGet(apiEndpoint, f string, args ...string) error {
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	for _, p := range args {
    		builder.WriteString("&")
    		builder.WriteString(p)
    	}
    	resp, err := http.Get(apiEndpoint + apiRoot + "q=" + f + builder.String())
    	if err != nil {
    
    		log.Info(fmt.Sprintf("Err: %s", err))
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		return err
    	}
    	builder.Reset()
    	switch resp.StatusCode {
    	case http.StatusOK:
    		defer resp.Body.Close()
    		bytes, err := ioutil.ReadAll(resp.Body)
    		if err != nil {
    			return err
    		}
    
    		switch f {
    		case "init":
    
    			pnd := string(bytes[9:45])
    			sbi := string(bytes[55:91])
    
    			viper.Set("CLI_PND", pnd)
    			viper.Set("CLI_SBI", sbi)
    
    			err := viper.WriteConfig()
    
    			if err != nil {
    				log.Error(err)
    			}
    
    		default:
    
    			fmt.Println(string(bytes))
    		}
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	case http.StatusCreated:
    		defer resp.Body.Close()
    		bytes, err := ioutil.ReadAll(resp.Body)
    		if err != nil {
    			return err
    		}
    
    		uuid := string(bytes[19:55])
    		viper.Set("LAST_DEVICE_UUID", uuid)
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		fmt.Println(string(bytes))
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    
    
    	case http.StatusAccepted:
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	default:
    		log.WithFields(log.Fields{
    			"status code": resp.StatusCode,
    		}).Error("operation unsuccessful")
    
    		return errors.New(resp.Status)
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	}
    	return nil
    }