1 package resolver
2
3
4
5
6
7 import (
8 "context"
9
10 "edge-infra.dev/pkg/edge/api/graph/model"
11 chariotClientApi "edge-infra.dev/pkg/edge/chariot/client"
12 "edge-infra.dev/pkg/lib/crypto"
13 "github.com/hashicorp/go-multierror"
14 )
15
16
17 func (r *mutationResolver) CreateTerminal(ctx context.Context, newTerminal model.TerminalCreateInput) (*model.Terminal, error) {
18 activationCode, err := crypto.GenerateRandomActivationCode()
19 if err != nil {
20 return nil, err
21 }
22
23 terminal, err := r.TerminalService.CreateTerminalEntry(ctx, &newTerminal, activationCode)
24 if err != nil {
25 return nil, err
26 }
27
28 terminal, err = r.TerminalService.UpdateTerminalEntry(ctx, &model.TerminalIDInput{
29 TerminalID: terminal.TerminalID,
30 TerminalValues: &model.TerminalUpdateInput{
31 PrimaryInterface: &terminal.Interfaces[0].TerminalInterfaceID,
32 },
33 })
34 if err != nil {
35 return nil, err
36 }
37
38 if secretErr := r.ActivationCodeService.Create(ctx, activationCode, terminal); secretErr != nil {
39 if err := r.TerminalService.DeleteTerminalEntry(ctx, terminal.TerminalID); err != nil {
40 secretErr = multierror.Append(secretErr, err)
41 }
42 return nil, secretErr
43 }
44
45 return terminal, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Create)
46 }
47
48
49 func (r *mutationResolver) DeleteTerminal(ctx context.Context, terminalID string) (bool, error) {
50 getLabel := false
51 terminal, err := r.TerminalService.GetTerminal(ctx, terminalID, &getLabel)
52 if err != nil {
53 return false, err
54 }
55 if err := r.ActivationCodeService.CleanupTerminal(ctx, terminalID, terminal.ClusterEdgeID); err != nil {
56 return false, err
57 }
58 err = r.TerminalService.DeleteTerminalEntry(ctx, terminalID)
59 if err != nil {
60 return false, err
61 }
62 return true, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Delete)
63 }
64
65
66 func (r *mutationResolver) UpdateTerminal(ctx context.Context, terminal model.TerminalIDInput) (*model.Terminal, error) {
67 updatedTerminal, err := r.TerminalService.UpdateTerminalEntry(ctx, &terminal)
68 if err != nil {
69 return nil, err
70 }
71
72 return updatedTerminal, r.UpdateIENodeViaChariot(ctx, updatedTerminal, chariotClientApi.Create)
73 }
74
75
76 func (r *mutationResolver) CreateTerminalInterface(ctx context.Context, terminalID string, newTerminalInterface model.TerminalInterfaceCreateInput) (*model.TerminalInterface, error) {
77 iface, err := r.TerminalService.CreateTerminalInterfaceEntry(ctx, terminalID, &newTerminalInterface)
78 if err != nil {
79 return nil, err
80 }
81
82 getLabel := false
83 terminal, err := r.TerminalService.GetTerminal(ctx, terminalID, &getLabel)
84 if err != nil {
85 return nil, err
86 }
87
88 return iface, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Create)
89 }
90
91
92 func (r *mutationResolver) DeleteTerminalInterface(ctx context.Context, terminalInterfaceID string) (bool, error) {
93 terminal, err := r.TerminalService.DeleteTerminalInterfaceEntry(ctx, terminalInterfaceID)
94 if err != nil {
95 return false, err
96 }
97
98 return true, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Create)
99 }
100
101
102 func (r *mutationResolver) UpdateTerminalInterface(ctx context.Context, interfaceArg model.TerminalInterfaceIDInput) (*model.TerminalInterface, error) {
103 updatedTerminalIface, err := r.TerminalService.UpdateTerminalInterfaceEntry(ctx, &interfaceArg)
104 if err != nil {
105 return nil, err
106 }
107
108 terminal, err := r.TerminalService.GetTerminalFromInterface(ctx, interfaceArg.TerminalInterfaceID)
109 if err != nil {
110 return nil, err
111 }
112
113 return updatedTerminalIface, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Create)
114 }
115
116
117 func (r *mutationResolver) CreateTerminalAddress(ctx context.Context, terminalInterfaceID string, newTerminalAddress model.TerminalAddressCreateInput) (*model.TerminalAddress, error) {
118 address, err := r.TerminalService.CreateTerminalAddressEntry(ctx, terminalInterfaceID, &newTerminalAddress)
119 if err != nil {
120 return nil, err
121 }
122
123 terminal, err := r.TerminalService.GetTerminalFromInterface(ctx, terminalInterfaceID)
124 if err != nil {
125 return nil, err
126 }
127
128 return address, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Create)
129 }
130
131
132 func (r *mutationResolver) DeleteTerminalAddress(ctx context.Context, terminalAddressID string) (bool, error) {
133 terminal, err := r.TerminalService.DeleteTerminalAddressEntry(ctx, terminalAddressID)
134 if err != nil {
135 return false, err
136 }
137
138 return true, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Create)
139 }
140
141
142 func (r *mutationResolver) UpdateTerminalAddress(ctx context.Context, address model.TerminalAddressIDInput) (*model.TerminalAddress, error) {
143 updatedTerminalAddr, err := r.TerminalService.UpdateTerminalAddressEntry(ctx, &address)
144 if err != nil {
145 return nil, err
146 }
147
148 terminal, err := r.TerminalService.GetTerminalFromAddress(ctx, updatedTerminalAddr.TerminalAddressID)
149 if err != nil {
150 return nil, err
151 }
152
153 return updatedTerminalAddr, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Create)
154 }
155
156
157 func (r *mutationResolver) RefreshActivationCode(ctx context.Context, terminalID string) (string, error) {
158 return r.ActivationCodeService.Refresh(ctx, terminalID)
159 }
160
161
162 func (r *mutationResolver) CreateTerminalDisk(ctx context.Context, terminalID string, newTerminalDisk model.TerminalDiskCreateInput) (*model.TerminalDisk, error) {
163 getLabel := false
164 terminal, err := r.TerminalService.GetTerminal(ctx, terminalID, &getLabel)
165 if err != nil {
166 return nil, err
167 }
168
169 disk, err := r.TerminalService.CreateTerminalDiskEntry(ctx, terminalID, &newTerminalDisk)
170 if err != nil {
171 return nil, err
172 }
173
174 return disk, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Create)
175 }
176
177
178 func (r *mutationResolver) DeleteTerminalDisk(ctx context.Context, terminalDiskID string) (bool, error) {
179 terminal, err := r.TerminalService.DeleteTerminalDiskEntry(ctx, terminalDiskID)
180 if err != nil {
181 return false, err
182 }
183
184 return true, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Create)
185 }
186
187
188 func (r *mutationResolver) UpdateTerminalDisk(ctx context.Context, terminalDisk model.TerminalDiskIDInput) (*model.TerminalDisk, error) {
189 updatedDisk, err := r.TerminalService.UpdateTerminalDiskEntry(ctx, terminalDisk.TerminalDiskID, *terminalDisk.TerminalDiskValues)
190 if err != nil {
191 return nil, err
192 }
193
194 getLabel := false
195 terminal, err := r.TerminalService.GetTerminal(ctx, updatedDisk.TerminalID, &getLabel)
196 if err != nil {
197 return nil, err
198 }
199
200 return updatedDisk, r.UpdateIENodeViaChariot(ctx, terminal, chariotClientApi.Create)
201 }
202
203
204 func (r *queryResolver) Terminal(ctx context.Context, terminalID string) (*model.Terminal, error) {
205 getLabel := true
206 terminal, err := r.TerminalService.GetTerminal(ctx, terminalID, &getLabel)
207 if err != nil {
208 return nil, err
209 }
210 return terminal, nil
211 }
212
213
214 func (r *queryResolver) Terminals(ctx context.Context, clusterEdgeID *string, terminalHostname *string) ([]*model.Terminal, error) {
215 terminals, err := r.TerminalService.GetTerminals(ctx, clusterEdgeID, terminalHostname)
216 if err != nil {
217 return nil, err
218 }
219 return terminals, nil
220 }
221
222
223 func (r *queryResolver) BannerTerminals(ctx context.Context, bannerEdgeID string, terminalLabels *bool) ([]*model.Terminal, error) {
224 projectID, err := r.BannerService.GetBannerProjectID(ctx, bannerEdgeID)
225
226 if err != nil {
227 return nil, err
228 }
229
230 terminals, err := r.TerminalService.GetBannerTerminals(ctx, bannerEdgeID, projectID)
231
232 if err == nil && terminalLabels != nil && *terminalLabels {
233 return r.TerminalLabelService.GetTerminalLabelsInfo(ctx, terminals)
234 }
235 return terminals, err
236 }
237
238
239 func (r *queryResolver) ActivationCode(ctx context.Context, terminalID string) (string, error) {
240 return r.ActivationCodeService.FetchFromSecret(ctx, terminalID)
241 }
242
243
244 func (r *queryResolver) TerminalDevices(ctx context.Context, terminalID string) (*model.TerminalDevices, error) {
245 return r.TerminalService.TerminalDevices(ctx, terminalID)
246 }
247
View as plain text