diff --git a/bouquins/auth.go b/bouquins/auth.go index bc71125..fdb1468 100644 --- a/bouquins/auth.go +++ b/bouquins/auth.go @@ -25,10 +25,23 @@ var ( Providers []OAuth2Provider ) +// LoginModel is login page model +type LoginModel struct { + Model + Providers []OAuth2Provider +} + +// NewLoginModel constructor for LoginModel +func (app *Bouquins) NewLoginModel(req *http.Request) *LoginModel { + return &LoginModel{*app.NewModel("Authentification", "provider", req), Providers} +} + // OAuth2Provider allows to get a user from an OAuth2 token type OAuth2Provider interface { GetUser(token *oauth2.Token) (string, error) Name() string + Label() string + Icon() string } // generates a 16 characters long random string @@ -75,7 +88,7 @@ func (app *Bouquins) LoginPage(res http.ResponseWriter, req *http.Request) error return nil } // choose provider - return app.render(res, tplProvider, app.NewModel("Authentification", "provider", req)) + return app.render(res, tplProvider, app.NewLoginModel(req)) } // LogoutPage logout connected user diff --git a/bouquins/bouquins.go b/bouquins/bouquins.go index 4da9dea..765b05b 100644 --- a/bouquins/bouquins.go +++ b/bouquins/bouquins.go @@ -157,7 +157,7 @@ type Model struct { Username string } -// NewModel constuctor for Model +// NewModel constructor for Model func (app *Bouquins) NewModel(title, page string, req *http.Request) *Model { return &Model{ Title: title, diff --git a/bouquins/github.go b/bouquins/github.go index fc065f0..fc70e6d 100644 --- a/bouquins/github.go +++ b/bouquins/github.go @@ -12,7 +12,7 @@ import ( // GithubProvider implements OAuth2 client with github.com type GithubProvider string -type gitHubEmail struct { +type githubEmail struct { Email string `json:"email"` Primary bool `json:"primary"` Verified bool `json:"verified"` @@ -28,6 +28,16 @@ func (p GithubProvider) Name() string { return string(p) } +// Label returns label of provider +func (p GithubProvider) Label() string { + return "Github" +} + +// Icon returns icon path for provider +func (p GithubProvider) Icon() string { + return "" // TODO +} + // GetUser returns github primary email func (p GithubProvider) GetUser(token *oauth2.Token) (string, error) { apiReq, err := http.NewRequest("GET", "https://api.github.com/user/emails", nil) @@ -42,7 +52,7 @@ func (p GithubProvider) GetUser(token *oauth2.Token) (string, error) { } dec := json.NewDecoder(response.Body) - var emails []gitHubEmail + var emails []githubEmail err = dec.Decode(&emails) if err != nil { log.Println("Error reading github API response", err) diff --git a/templates/provider.html b/templates/provider.html index c21ebf5..481e316 100644 --- a/templates/provider.html +++ b/templates/provider.html @@ -2,8 +2,10 @@

Veuillez sélectionner un mode d'authentification:

{{ template "footer.html" . }}