Browse Source

Client ID is optional when creating Github services

We only use it for making webhooks (to determine which GH account to load up).
We need it to be optional for the global GH bot to work (which has no account
and uses the account of whoever issued the !command to do the work).
kegan/gh-service-client-id-is-opt
Kegan Dougal 8 years ago
parent
commit
699b003c15
  1. 16
      src/github.com/matrix-org/go-neb/services/github/github.go

16
src/github.com/matrix-org/go-neb/services/github/github.go

@ -26,7 +26,7 @@ type githubService struct {
id string id string
serviceUserID string serviceUserID string
webhookEndpointURL string webhookEndpointURL string
ClientUserID string
ClientUserID string // optional; required for webhooks
RealmID string RealmID string
SecretToken string SecretToken string
HandleCommands bool HandleCommands bool
@ -193,8 +193,8 @@ func (s *githubService) OnReceiveWebhook(w http.ResponseWriter, req *http.Reques
w.WriteHeader(200) w.WriteHeader(200)
} }
func (s *githubService) Register() error { func (s *githubService) Register() error {
if s.RealmID == "" || s.ClientUserID == "" {
return fmt.Errorf("RealmID and ClientUserID are required")
if s.RealmID == "" {
return fmt.Errorf("RealmID is required")
} }
// check realm exists // check realm exists
realm, err := database.GetServiceDB().LoadAuthRealm(s.RealmID) realm, err := database.GetServiceDB().LoadAuthRealm(s.RealmID)
@ -206,12 +206,14 @@ func (s *githubService) Register() error {
return fmt.Errorf("Realm is of type '%s', not 'github'", realm.Type()) return fmt.Errorf("Realm is of type '%s', not 'github'", realm.Type())
} }
// In order to register the GH service, you must have authed with GH.
if s.ClientUserID != "" {
// In order to register the GH service as a client, you must have authed with GH.
cli := s.githubClientFor(s.ClientUserID, false) cli := s.githubClientFor(s.ClientUserID, false)
if cli == nil { if cli == nil {
return fmt.Errorf( return fmt.Errorf(
"User %s does not have a Github auth session with realm %s.", s.ClientUserID, realm.ID()) "User %s does not have a Github auth session with realm %s.", s.ClientUserID, realm.ID())
} }
}
log.Infof("%+v", s) log.Infof("%+v", s)
@ -219,6 +221,12 @@ func (s *githubService) Register() error {
} }
func (s *githubService) PostRegister(oldService types.Service) { func (s *githubService) PostRegister(oldService types.Service) {
// PostRegister handles creating/destroying webhooks, which is only valid if this service
// is configured on behalf of a client.
if s.ClientUserID == "" {
return
}
cli := s.githubClientFor(s.ClientUserID, false) cli := s.githubClientFor(s.ClientUserID, false)
if cli == nil { if cli == nil {
log.Errorf("PostRegister: %s does not have a github session", s.ClientUserID) log.Errorf("PostRegister: %s does not have a github session", s.ClientUserID)

Loading…
Cancel
Save