/
subscription.go
140 lines (114 loc) · 3.31 KB
/
subscription.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package api
import (
"os"
"path/filepath"
"github.com/ironstar-io/ironstar-cli/cmd/flags"
"github.com/ironstar-io/ironstar-cli/internal/errs"
"github.com/ironstar-io/ironstar-cli/internal/services"
"github.com/ironstar-io/ironstar-cli/internal/system/fs"
"github.com/ironstar-io/ironstar-cli/internal/types"
"encoding/json"
"github.com/pkg/errors"
)
func GetSubscription(creds types.Keylink, output, hashOrAlias string) (types.Subscription, error) {
empty := types.Subscription{}
req := &Request{
Retries: 3,
RunTokenRefresh: true,
Credentials: creds,
Method: "GET",
Path: "/subscription/" + hashOrAlias,
MapStringPayload: map[string]interface{}{},
}
res, err := req.NankaiSend()
if err != nil {
return empty, errors.Wrap(err, errs.APIGetSubscriptionErrorMsg)
}
if res.StatusCode != 200 {
return empty, res.HandleFailure(output)
}
var sub types.Subscription
err = json.Unmarshal(res.Body, &sub)
if err != nil {
return empty, err
}
return sub, nil
}
func GetUserSubscriptions(creds types.Keylink, output string) ([]types.UserAccessResponse, error) {
empty := []types.UserAccessResponse{}
req := &Request{
Retries: 3,
RunTokenRefresh: true,
Credentials: creds,
Method: "GET",
Path: "/user/subscriptions",
MapStringPayload: map[string]interface{}{},
}
res, err := req.NankaiSend()
if err != nil {
return empty, errors.Wrap(err, errs.APISubListErrorMsg)
}
if res.StatusCode != 200 {
return empty, res.HandleFailure(output)
}
var uar []types.UserAccessResponse
err = json.Unmarshal(res.Body, &uar)
if err != nil {
return empty, err
}
return uar, nil
}
func GetSubscriptionContext(creds types.Keylink, flg flags.Accumulator) (types.Subscription, error) {
empty := types.Subscription{}
if flg.Subscription != "" {
sub, err := GetSubscription(creds, flg.Output, flg.Subscription)
if err != nil {
return empty, err
}
return sub, nil
}
wd, err := os.Getwd()
if err != nil {
return empty, err
}
confPath := filepath.Join(wd, ".ironstar", "config.yml")
exists := fs.CheckExists(confPath)
if !exists {
createNewProj := services.ConfirmationPrompt("Couldn't find a project configuration in this directory. Would you like to create one?", "y", flg.AutoAccept)
if createNewProj {
err = services.InitializeIronstarProject()
if err != nil {
return empty, err
}
} else {
return empty, errors.New("This command requires a project to be configured.")
}
}
pr := fs.ProjectRoot()
proj, err := services.ReadInProjectConfig(pr)
if err != nil {
return empty, errors.Wrap(err, errs.NoProjectFoundErrorMsg)
}
return proj.Subscription, nil
}
func GetSubscriptionEnvironmentContext(creds types.Keylink, flg flags.Accumulator) (types.SubscriptionEnvironment, error) {
empty := types.SubscriptionEnvironment{}
sub, err := GetSubscriptionContext(creds, flg)
if err != nil {
return empty, err
}
if sub == (types.Subscription{}) {
return empty, errors.New("No subscription was able to found")
}
env, err := GetEnvironmentContext(creds, flg, sub.HashedID)
if err != nil {
return empty, err
}
if env == (types.Environment{}) {
return empty, errors.New("No environment was able to found")
}
return types.SubscriptionEnvironment{
Subscription: sub,
Environment: env,
}, nil
}