EE: PLT-4512 Show secret in addition to QR code when activating MFA (#4427)

* EE: Update MFA to display secret for manual entry

* Width adjustments for secret (#4423)

* Add unit test
Этот коммит содержится в:
Joram Wilander
2016-11-03 10:41:11 -04:00
коммит произвёл Christopher Speller
родитель 5b34ac6e1e
Коммит 0234f793f2
10 изменённых файлов: 90 добавлений и 25 удалений

Просмотреть файл

@@ -64,7 +64,7 @@ func InitUser() {
BaseRoutes.NeedChannel.Handle("/users/autocomplete", ApiUserRequired(autocompleteUsersInChannel)).Methods("GET")
BaseRoutes.Users.Handle("/mfa", ApiAppHandler(checkMfa)).Methods("POST")
BaseRoutes.Users.Handle("/generate_mfa_qr", ApiUserRequiredTrustRequester(generateMfaQrCode)).Methods("GET")
BaseRoutes.Users.Handle("/generate_mfa_secret", ApiUserRequiredTrustRequester(generateMfaSecret)).Methods("GET")
BaseRoutes.Users.Handle("/update_mfa", ApiUserRequired(updateMfa)).Methods("POST")
BaseRoutes.Users.Handle("/claim/email_to_oauth", ApiAppHandler(emailToOAuth)).Methods("POST")
@@ -2306,7 +2306,7 @@ func resendVerification(c *Context, w http.ResponseWriter, r *http.Request) {
}
}
func generateMfaQrCode(c *Context, w http.ResponseWriter, r *http.Request) {
func generateMfaSecret(c *Context, w http.ResponseWriter, r *http.Request) {
uchan := Srv.Store.User().Get(c.Session.UserId)
var user *model.User
@@ -2319,22 +2319,25 @@ func generateMfaQrCode(c *Context, w http.ResponseWriter, r *http.Request) {
mfaInterface := einterfaces.GetMfaInterface()
if mfaInterface == nil {
c.Err = model.NewLocAppError("generateMfaQrCode", "api.user.generate_mfa_qr.not_available.app_error", nil, "")
c.Err = model.NewLocAppError("generateMfaSecret", "api.user.generate_mfa_qr.not_available.app_error", nil, "")
c.Err.StatusCode = http.StatusNotImplemented
return
}
img, err := mfaInterface.GenerateQrCode(user)
secret, img, err := mfaInterface.GenerateSecret(user)
if err != nil {
c.Err = err
return
}
w.Header().Del("Content-Type") // Content-Type will be set automatically by the http writer
resp := map[string]string{}
resp["qr_code"] = b64.StdEncoding.EncodeToString(img)
resp["secret"] = secret
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Pragma", "no-cache")
w.Header().Set("Expires", "0")
w.Write(img)
w.Write([]byte(model.MapToJson(resp)))
}
func updateMfa(c *Context, w http.ResponseWriter, r *http.Request) {

Просмотреть файл

@@ -1687,7 +1687,7 @@ func TestMeInitialLoad(t *testing.T) {
}
func TestGenerateMfaQrCode(t *testing.T) {
func TestGenerateMfaSecret(t *testing.T) {
th := Setup()
Client := th.CreateClient()
@@ -1701,13 +1701,13 @@ func TestGenerateMfaQrCode(t *testing.T) {
Client.Logout()
if _, err := Client.GenerateMfaQrCode(); err == nil {
if _, err := Client.GenerateMfaSecret(); err == nil {
t.Fatal("should have failed - not logged in")
}
Client.Login(user.Email, user.Password)
if _, err := Client.GenerateMfaQrCode(); err == nil {
if _, err := Client.GenerateMfaSecret(); err == nil {
t.Fatal("should have failed - not licensed")
}