9
9
"github.com/slack-go/slack"
10
10
)
11
11
12
+ const Usage = `register publicKey serialNumber`
13
+
12
14
type slackbot struct {
13
15
api * slack.Client
14
16
database * database.APIServerDB
@@ -21,7 +23,43 @@ func New(token string, database *database.APIServerDB) *slackbot {
21
23
}
22
24
}
23
25
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 () {
25
63
log .SetLevel (log .DebugLevel )
26
64
rtm := s .api .NewRTM ()
27
65
@@ -44,48 +82,15 @@ func (s *slackbot) registrationSlackHandler() {
44
82
}
45
83
46
84
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 ))
69
87
70
88
case * slack.InvalidAuthEvent :
71
89
log .Fatalf ("slack auth failed: %v" , message )
72
90
}
73
91
}
74
92
}
75
93
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
-
89
94
func (s * slackbot ) getUserEmail (userID string ) (string , error ) {
90
95
if info , err := s .api .GetUserInfo (userID ); err != nil {
91
96
return "" , fmt .Errorf ("getting user info: %w" , err )
@@ -95,5 +100,5 @@ func (s *slackbot) getUserEmail(userID string) (string, error) {
95
100
}
96
101
97
102
func (s * slackbot ) Run () {
98
- go s .registrationSlackHandler ()
103
+ go s .slackHandler ()
99
104
}
0 commit comments