2020-12-18 20:25:22 -05:00
|
|
|
package cmd
|
|
|
|
|
|
|
|
import (
|
|
|
|
"csctl/config"
|
|
|
|
"csctl/internal"
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"net/http"
|
2020-12-18 20:26:58 -05:00
|
|
|
"os/user"
|
|
|
|
|
2020-12-18 20:25:22 -05:00
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/kataras/golog"
|
|
|
|
"github.com/logrusorgru/aurora/v3"
|
|
|
|
"github.com/olekukonko/tablewriter"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Response struct {
|
|
|
|
Status string `json:"status"`
|
|
|
|
Decision string `json:"decision"`
|
|
|
|
ApplicationID string `json:"id"`
|
|
|
|
ProcessedBy string `json:"processedBy"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func ApplyHard(ctx *cli.Context) error {
|
2020-12-18 20:26:58 -05:00
|
|
|
u, _ := user.Current()
|
|
|
|
account, err := internal.FetchAccount(u.Username)
|
2020-12-18 20:25:22 -05:00
|
|
|
if err != nil {
|
|
|
|
internal.Error(err, "Unable to read account information.")
|
|
|
|
}
|
|
|
|
|
|
|
|
resp, err := http.Get(fmt.Sprintf("https://eds.libraryofcode.org/cs/t2/?userID=%s&auth=%s", account.UserID, config.FetchInternalKey()))
|
|
|
|
if err != nil {
|
|
|
|
internal.Error(err, "Unable to read information from EDS.")
|
|
|
|
}
|
|
|
|
|
|
|
|
tableString := &strings.Builder{}
|
|
|
|
table := tablewriter.NewWriter(tableString)
|
|
|
|
table.SetHeader([]string{"Status", "Application ID"})
|
|
|
|
|
|
|
|
if resp.StatusCode == 404 || resp.StatusCode == 400 || resp.StatusCode == 401 {
|
|
|
|
dataErr := [][]string{
|
|
|
|
{aurora.Yellow("PRE-DECLINED").String(), "N/A"},
|
|
|
|
}
|
|
|
|
table.AppendBulk(dataErr)
|
|
|
|
table.Render()
|
|
|
|
fmt.Println(tableString.String())
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
var response Response
|
|
|
|
|
|
|
|
if err := json.NewDecoder(resp.Body).Decode(&response); err != nil {
|
|
|
|
internal.Error(err, "Unable to parse JSON from CSD.")
|
|
|
|
}
|
|
|
|
|
|
|
|
data := [][]string{
|
|
|
|
{response.Decision, response.ApplicationID},
|
|
|
|
}
|
|
|
|
table.AppendBulk(data)
|
|
|
|
table.Render()
|
|
|
|
fmt.Println(tableString.String())
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func ApplySoft(ctx *cli.Context) error {
|
|
|
|
golog.Debug("Fetching account information.")
|
2020-12-18 20:26:58 -05:00
|
|
|
u, _ := user.Current()
|
|
|
|
account, err := internal.FetchAccount(u.Username)
|
2020-12-18 20:25:22 -05:00
|
|
|
if err != nil {
|
|
|
|
internal.Error(err, "Unable to read account information.")
|
|
|
|
}
|
|
|
|
|
|
|
|
golog.Info("Processing application, do not exit the CLI...")
|
|
|
|
|
|
|
|
resp, err := http.Get(fmt.Sprintf("https://eds.libraryofcode.org/cs/t2pre/?userID=%s&auth=%s", account.UserID, config.FetchInternalKey()))
|
|
|
|
if err != nil {
|
|
|
|
internal.Error(err, "Unable to read response from EDS.")
|
|
|
|
}
|
|
|
|
|
|
|
|
tableString := &strings.Builder{}
|
|
|
|
table := tablewriter.NewWriter(tableString)
|
|
|
|
table.SetHeader([]string{"Status", "Application ID"})
|
|
|
|
|
|
|
|
if resp.StatusCode == 404 || resp.StatusCode == 400 || resp.StatusCode == 401 {
|
|
|
|
dataErr := [][]string{
|
|
|
|
{aurora.Yellow("PRE-DECLINED").String(), "N/A"},
|
|
|
|
}
|
|
|
|
table.AppendBulk(dataErr)
|
|
|
|
table.Render()
|
|
|
|
fmt.Println(tableString.String())
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
var response Response
|
|
|
|
|
|
|
|
if err := json.NewDecoder(resp.Body).Decode(&response); err != nil {
|
|
|
|
internal.Error(err, "Unable to parse JSON from CSD.")
|
|
|
|
}
|
|
|
|
|
|
|
|
data := [][]string{
|
|
|
|
{response.Decision, response.ApplicationID},
|
|
|
|
}
|
|
|
|
table.AppendBulk(data)
|
|
|
|
table.Render()
|
|
|
|
fmt.Println(tableString.String())
|
|
|
|
return nil
|
|
|
|
}
|