From 188dcebf0561480d4e4f67f3fa42769665171968 Mon Sep 17 00:00:00 2001 From: Mario Enrico Ragucci Date: Mon, 29 Mar 2021 06:20:10 +0200 Subject: [PATCH] Use ColorSettings of ServerConfig for QRCode gen. Signed-off-by: Mario Enrico Ragucci --- qrcode/qrcode.go | 15 ++++++++++++--- router/router.go | 8 +++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/qrcode/qrcode.go b/qrcode/qrcode.go index 43d706f..f5151e4 100644 --- a/qrcode/qrcode.go +++ b/qrcode/qrcode.go @@ -14,7 +14,7 @@ import ( const FormatString string = "otpauth://totp/%s:%s@%s?algorithm=SHA1&digits=%d&issuer=%s&period=30&secret=%s" // GenerateQrCode Generates a QRCode of the totp url -func GenerateQrCode(user structs.User, digits uint8) ([]byte, error) { +func GenerateQrCode(user structs.User, bgcolor, fgcolor structs.ColorSetting, digits uint8) ([]byte, error) { var png []byte secret, err := middleware.GetUserKeyBase32(user) if err != nil { @@ -26,14 +26,23 @@ func GenerateQrCode(user structs.User, digits uint8) ([]byte, error) { return nil, err } - code.BackgroundColor = color.Transparent - code.ForegroundColor = color.Black + code.BackgroundColor = convertColorSetting(bgcolor) + code.ForegroundColor = convertColorSetting(fgcolor) png, err = code.PNG(256) return png, err } +func convertColorSetting(setting structs.ColorSetting) color.Color { + return color.RGBA{ + R: setting.Red, + G: setting.Green, + B: setting.Blue, + A: setting.Alpha, + } +} + // WriteQrCodeImage writes a png to the filesystem func WriteQrCodeImage(user structs.User, filePath string, digits uint8) error { secret, err := middleware.GetUserKeyBase32(user) diff --git a/router/router.go b/router/router.go index 685f33e..2723e06 100644 --- a/router/router.go +++ b/router/router.go @@ -738,7 +738,13 @@ func GenerateQrCode(w http.ResponseWriter, r *http.Request) { return } - png, err := qrcode.GenerateQrCode(userStruct, tokenlength) + bgcolor, fgcolor, err := middleware.GetQrCodeColors() + if err != nil { + returnError(err, 500, w) + return + } + + png, err := qrcode.GenerateQrCode(userStruct, bgcolor, fgcolor, tokenlength) if err != nil { returnError(err, 500, w) return