Skip to content

Commit d18af2a

Browse files
committed
make parsing of slack commands prettier
1 parent 3eb5dc6 commit d18af2a

File tree

1 file changed

+42
-37
lines changed

1 file changed

+42
-37
lines changed

apiserver/slack/slack.go

+42-37
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"github.com/slack-go/slack"
1010
)
1111

12+
const Usage = `register publicKey serialNumber`
13+
1214
type slackbot struct {
1315
api *slack.Client
1416
database *database.APIServerDB
@@ -21,7 +23,43 @@ func New(token string, database *database.APIServerDB) *slackbot {
2123
}
2224
}
2325

24-
func (s *slackbot) registrationSlackHandler() {
26+
func (s *slackbot) handleRegister(msg slack.Msg) string {
27+
parts := strings.Split(msg.Text, " ")
28+
if len(parts) != 3 {
29+
return fmt.Sprintf("invalid command format, usage:\n%v", Usage)
30+
}
31+
32+
publicKey, serial := parts[1], parts[2]
33+
email, err := s.getUserEmail(msg.User)
34+
if err != nil {
35+
log.Errorf("getting user email: %v", err)
36+
return "unable to find email for your slack user :confused:, I've notified the nais device team for you."
37+
}
38+
39+
err = s.database.AddClient(email, publicKey, serial)
40+
if err != nil {
41+
log.Errorf("adding client to database: %v", err)
42+
return "Something went wrong during registration :sweat_smile:, I've notified the nais device team for you."
43+
} else {
44+
return "Successfully registered :partyparrot:"
45+
}
46+
}
47+
48+
func (s *slackbot) handleMsg(msg slack.Msg) string {
49+
parts := strings.SplitN(msg.Text, " ", 1)
50+
if len(parts) == 0 {
51+
return fmt.Sprintf("unable to parse input, usage:\n%v", Usage)
52+
}
53+
54+
switch parts[0] {
55+
case "register":
56+
return s.handleRegister(msg)
57+
default:
58+
return fmt.Sprintf("unrecognized command, usage:\n%v", Usage)
59+
}
60+
}
61+
62+
func (s *slackbot) slackHandler() {
2563
log.SetLevel(log.DebugLevel)
2664
rtm := s.api.NewRTM()
2765

@@ -44,48 +82,15 @@ func (s *slackbot) registrationSlackHandler() {
4482
}
4583

4684
log.Debugf("MessageEvent msg: %v", msg)
47-
48-
publicKey, serial, err := parseRegisterMessage(msg.Text)
49-
if err != nil {
50-
log.Errorf("parsing message: %v", err)
51-
break
52-
}
53-
54-
email, err := s.getUserEmail(msg.User)
55-
if err != nil {
56-
log.Errorf("getting user email: %v", err)
57-
break
58-
}
59-
60-
log.Infof("email: %v, publicKey: %v, serial: %v", email, publicKey, serial)
61-
62-
err = s.database.AddClient(msg.Username, publicKey, serial)
63-
if err != nil {
64-
log.Errorf("adding client to database: %v", err)
65-
rtm.SendMessage(rtm.NewOutgoingMessage("Something went wrong during registration :sweat_smile:, I've notified the nais device team for you.", msg.Channel))
66-
} else {
67-
rtm.SendMessage(rtm.NewOutgoingMessage("Successfully registered :partyparrot:", msg.Channel))
68-
}
85+
response := s.handleMsg(msg)
86+
rtm.SendMessage(rtm.NewOutgoingMessage(response, msg.Channel))
6987

7088
case *slack.InvalidAuthEvent:
7189
log.Fatalf("slack auth failed: %v", message)
7290
}
7391
}
7492
}
7593

76-
func parseRegisterMessage(text string) (string, string, error) {
77-
// "register publicKey serial"
78-
parts := strings.Split(text, " ")
79-
if len(parts) != 3 {
80-
return "", "", fmt.Errorf("parsing register command: must be exactly 3 params: \"%v\"", text)
81-
}
82-
command, publicKey, serial := parts[0], parts[1], parts[2]
83-
if command != "register" {
84-
return "", "", fmt.Errorf("parsing register command: invalid command: \"%v\"", command)
85-
}
86-
return publicKey, serial, nil
87-
}
88-
8994
func (s *slackbot) getUserEmail(userID string) (string, error) {
9095
if info, err := s.api.GetUserInfo(userID); err != nil {
9196
return "", fmt.Errorf("getting user info: %w", err)
@@ -95,5 +100,5 @@ func (s *slackbot) getUserEmail(userID string) (string, error) {
95100
}
96101

97102
func (s *slackbot) Run() {
98-
go s.registrationSlackHandler()
103+
go s.slackHandler()
99104
}

0 commit comments

Comments
 (0)