Skip to content

Commit 3820476

Browse files
committed
remove state from builder
1 parent 8d618e4 commit 3820476

File tree

1 file changed

+43
-49
lines changed

1 file changed

+43
-49
lines changed

bot/connector/github/builder.go

Lines changed: 43 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,33 @@ var (
2525
"pull_request_review_comment"}
2626
)
2727

28-
type eventDataBuilder struct {
28+
type builderContext struct {
2929
secret []byte
3030
client *ghClient
3131
data *eventData
3232
}
3333

34-
func (builder *eventDataBuilder) validate(payload []byte, request *http.Request) bool {
35-
if len(builder.secret) == 0 {
34+
type eventDataBuilder struct {
35+
}
36+
37+
func (builder *eventDataBuilder) validate(context *builderContext, payload []byte, request *http.Request) bool {
38+
if len(context.secret) == 0 {
3639
return true
3740
}
38-
h := hmac.New(sha1.New, builder.secret)
41+
h := hmac.New(sha1.New, context.secret)
3942
h.Write(payload)
4043
result := fmt.Sprintf("sha1=%s", hex.EncodeToString(h.Sum(nil)))
4144
return request.Header.Get("X-Hub-Signature") == result
4245
}
4346

44-
func (builder *eventDataBuilder) readPayload(r *http.Request) (*payload, []byte, error) {
47+
func (builder *eventDataBuilder) readPayload(context *builderContext, r *http.Request) (*payload, []byte, error) {
4548
body := r.Body
4649
defer body.Close()
4750
raw, err := ioutil.ReadAll(io.LimitReader(body, r.ContentLength))
4851
if err != nil {
4952
return nil, raw, err
5053
}
51-
if !builder.validate(raw, r) {
54+
if !builder.validate(context, raw, r) {
5255
return nil, raw, fmt.Errorf("Payload could not be validated")
5356
}
5457
var pr payload
@@ -58,35 +61,35 @@ func (builder *eventDataBuilder) readPayload(r *http.Request) (*payload, []byte,
5861
return &pr, raw, nil
5962
}
6063

61-
func (builder *eventDataBuilder) readFromJson(payload *payload) {
62-
builder.data.number = payload.Number
63-
builder.data.title = payload.PullRequest.Title
64-
builder.data.changedFiles = payload.PullRequest.ChangedFiles
65-
builder.data.additions = payload.PullRequest.Additions
66-
builder.data.deletions = payload.PullRequest.Deletions
67-
builder.data.ref = payload.PullRequest.Base.Ref
68-
builder.data.origin = strings.ToLower(payload.PullRequest.User.Login)
69-
builder.data.state = payload.PullRequest.State
64+
func (builder *eventDataBuilder) readFromJson(context *builderContext, payload *payload) {
65+
context.data.number = payload.Number
66+
context.data.title = payload.PullRequest.Title
67+
context.data.changedFiles = payload.PullRequest.ChangedFiles
68+
context.data.additions = payload.PullRequest.Additions
69+
context.data.deletions = payload.PullRequest.Deletions
70+
context.data.ref = payload.PullRequest.Base.Ref
71+
context.data.origin = strings.ToLower(payload.PullRequest.User.Login)
72+
context.data.state = payload.PullRequest.State
7073
}
7174

72-
func (builder *eventDataBuilder) readFromClient() {
73-
id := builder.data.number
74-
builder.data.assignees = builder.client.GetAssignees(id)
75-
builder.data.state = builder.client.GetState(id)
76-
builder.data.labels = builder.client.GetLabels(id)
77-
builder.data.comments = builder.client.GetComments(id)
78-
fileNames := builder.client.GetFileNames(id)
79-
builder.data.fileNames = fileNames
75+
func (builder *eventDataBuilder) readFromClient(context *builderContext) {
76+
id := context.data.number
77+
context.data.assignees = context.client.GetAssignees(id)
78+
context.data.state = context.client.GetState(id)
79+
context.data.labels = context.client.GetLabels(id)
80+
context.data.comments = context.client.GetComments(id)
81+
fileNames := context.client.GetFileNames(id)
82+
context.data.fileNames = fileNames
8083
stringSet := util.StringSet{Transformer: filepath.Ext}
81-
builder.data.fileExt = stringSet.AddAll(fileNames).Values()
84+
context.data.fileExt = stringSet.AddAll(fileNames).Values()
8285
}
8386

84-
func (builder *eventDataBuilder) checkProcessState() bool {
87+
func (builder *eventDataBuilder) checkProcessState(context *builderContext) bool {
8588
util.Logger.Debug("Current issue [(%d) %s] state is '%s'",
86-
builder.data.GetNumber(),
87-
builder.data.GetTitle(),
88-
builder.data.state)
89-
return builder.data.state != "closed"
89+
context.data.GetNumber(),
90+
context.data.GetTitle(),
91+
context.data.state)
92+
return context.data.state != "closed"
9093
}
9194

9295
func (builder *eventDataBuilder) PartialBuildFromRequest(config bot.ClientConfig, r *http.Request) (bot.EventData, bool, error) {
@@ -105,8 +108,8 @@ func (builder *eventDataBuilder) PartialBuildFromRequest(config bot.ClientConfig
105108
util.Logger.Debug("Got GitHub '%s' event", githubEvent)
106109
return nil, false, nil
107110
}
108-
builder.secret = []byte(config.GetSecret())
109-
pl, raw, err := builder.readPayload(r)
111+
context := &builderContext{secret: []byte(config.GetSecret())}
112+
pl, raw, err := builder.readPayload(context, r)
110113
if err != nil {
111114
return nil, false, err
112115
}
@@ -117,22 +120,13 @@ func (builder *eventDataBuilder) PartialBuildFromRequest(config bot.ClientConfig
117120
}
118121
repo := pl.Repository.Name
119122
owner := pl.Repository.Owner.Login
120-
builder.data = &eventData{owner: owner, repo: repo, payload: raw}
121-
builder.readFromJson(pl)
122-
return builder.data, builder.checkProcessState(), nil
123+
context.data = &eventData{owner: owner, repo: repo, payload: raw}
124+
builder.readFromJson(context, pl)
125+
return context.data, builder.checkProcessState(context), nil
123126
}
124127

125128
func (builder *eventDataBuilder) BuildFromRequest(config bot.ClientConfig, r *http.Request) (bot.EventData, bool, error) {
126-
_, ok, err := builder.PartialBuildFromRequest(config, r)
127-
if !ok || err != nil {
128-
return nil, ok, err
129-
}
130-
repo := builder.data.repo
131-
owner := builder.data.owner
132-
builder.client = newClient(config, owner, repo)
133-
builder.data.client = builder.client
134-
builder.readFromClient()
135-
return builder.data, builder.checkProcessState(), nil
129+
panic("Don't use anymore")
136130
}
137131

138132
func (builder *eventDataBuilder) BuildFromPayload(config bot.ClientConfig, raw []byte) (bot.EventData, bool, error) {
@@ -147,11 +141,11 @@ func (builder *eventDataBuilder) BuildFromPayload(config bot.ClientConfig, raw [
147141
}
148142
repo := pl.Repository.Name
149143
owner := pl.Repository.Owner.Login
150-
builder.client = newClient(config, owner, repo)
151-
builder.data = &eventData{owner: owner, repo: repo, payload: raw, client: builder.client}
152-
builder.readFromJson(&pl)
153-
builder.readFromClient()
154-
return builder.data, builder.checkProcessState(), nil
144+
context := &builderContext{client: newClient(config, owner, repo)}
145+
context.data = &eventData{owner: owner, repo: repo, payload: raw, client: context.client}
146+
builder.readFromJson(context, &pl)
147+
builder.readFromClient(context)
148+
return context.data, builder.checkProcessState(context), nil
155149
}
156150

157151
func init() {

0 commit comments

Comments
 (0)