/
slack-disable-2fa.go
81 lines (63 loc) · 2.1 KB
/
slack-disable-2fa.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
package main
import (
"fmt"
"github.com/nlopes/slack"
"os"
"time"
)
var apiKey string = ""
var slackPolicy = "To use Slack you must have 2FA enabled as per the requirements and terms of use. You will be reminded every 24 hours until you enabled 2FA.\n\n" +
"Every so often we will disable accounts that do not have 2FA turned on. To avoid this please turn on 2FA now. Instructions for 2FA can be found at https://slack.zendesk.com/hc/en-us/articles/204509068-Enabling-two-factor-authentication.\n\n"
func sendMessage(api slack.Client, channel string, message string) error {
params := slack.PostMessageParameters{}
params.LinkNames = 1
_, _, err := api.PostMessage(channel, message, params)
return err
}
func annoyUser(api slack.Client, user string) error {
message := "You have been identied as a user that does not have 2 Factor Auth (2FA).\n\n" + slackPolicy
err := sendMessage(api, "@"+user, message)
return err
}
func shameUsers(api slack.Client, userString string) error {
message := "Hello everyone...\n\n" +
"The following users have not enabled 2 Factor auth " + userString + "\n\n" +
slackPolicy
err := sendMessage(api, "#general", message)
return err
}
func getUsers(api slack.Client) error {
users, err := api.GetUsers()
if err != nil {
return err
}
var userList = ""
for _, member := range users {
if member.Has2FA == false && member.Deleted == false && member.IsBot == false && member.IsRestricted == false && member.IsUltraRestricted == false && member.ID != "USLACKBOT" {
if err := annoyUser(api, member.Name); err != nil {
return err
}
userList += "@" + member.Name + " "
fmt.Printf("%s\n", member.Name)
}
}
if err := shameUsers(api, userList); err != nil {
return err
}
return nil
}
func main() {
apiKey = os.Getenv("SLACK_API_KEY")
if apiKey == "" {
println("You must set the enviroment variable SLACK_API_KEY")
os.Exit(-1)
}
api := slack.New(apiKey)
for {
if err := getUsers(*api); err != nil {
fmt.Printf("Error getting users and annoying them %s\n", err)
}
fmt.Printf("Running again in 24 hours...")
time.Sleep(time.Hour * 24)
}
}