-
Notifications
You must be signed in to change notification settings - Fork 0
/
workflow.go
83 lines (74 loc) · 2.34 KB
/
workflow.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
package archeryapi
import (
"encoding/json"
"github.com/go-playground/validator/v10"
"strings"
)
const (
// SubmitUrl is the url to submit a workflow
SubmitUrl = "/autoreview/"
// SubmitOtherInstance is the url to submit a workflow to another instance
SubmitOtherInstance = "/submitotherinstance/"
)
var validate *validator.Validate
type WorkflowService interface {
Submit(request *WorkflowSubmitRequest) error
}
type WorkflowClient struct {
apiClient *Client
}
// Submit submits a workflow
func (c WorkflowClient) Submit(request *WorkflowSubmitRequest) error {
validate = validator.New()
err := validate.Struct(request)
if err != nil {
return err
}
token, err := c.getMiddlewareToken()
if err != nil {
return err
}
request.CsrfMiddlewareToken = token
marshal, err := json.Marshal(request)
if err != nil {
return err
}
params := map[string]string{}
err = json.Unmarshal(marshal, ¶ms)
if err != nil {
return err
}
_, err = c.apiClient.httpClient.R().
SetFormData(params).
Post(SubmitUrl)
if err != nil {
return err
}
return nil
}
// getMiddlewareToken gets the middleware token from html form
func (c WorkflowClient) getMiddlewareToken() (string, error) {
resp, err := c.apiClient.httpClient.R().
Get(SubmitOtherInstance)
if err != nil {
return "", err
}
csrfMiddlewareToken := resp.String()[strings.Index(resp.String(), "csrfmiddlewaretoken")+len("csrfmiddlewaretoken")+len(` value="`):]
csrfMiddlewareToken = csrfMiddlewareToken[1:strings.Index(csrfMiddlewareToken, `">`)]
return csrfMiddlewareToken, nil
}
type WorkflowSubmitRequest struct {
CsrfMiddlewareToken string `json:"csrfmiddlewaretoken"`
WorkflowId string `json:"workflow_id"`
SqlContent string `json:"sql_content" validate:"required"`
SqlUpload string `json:"sql-upload"`
WorkflowName string `json:"workflow_name" validate:"required"`
DemandUrl string `json:"demand_url"`
GroupName string `json:"group_name" validate:"required"`
InstanceName string `json:"instance_name" validate:"required"`
DbName string `json:"db_name" validate:"required"`
IsBackup string `json:"is_backup" validate:"required"`
RunDateStart string `json:"run_date_start"`
RunDateEnd string `json:"run_date_end"`
WorkflowAuditors string `json:"workflow_auditors" validate:"required"`
}