Add the module name after the path to the repo and simply name it ersteller

This commit is contained in:
Achim Rohn
2025-11-15 11:36:56 +01:00
parent 4c892c5828
commit a1b93c0eba
86 changed files with 253 additions and 251 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
package authentication
import (
. "git.gorlug.de/code/golang/ersteller-lib"
. "git.gorlug.de/code/golang/ersteller-lib/ersteller"
"net/http"
"strings"
+31 -31
View File
@@ -6,8 +6,8 @@ import (
"encoding/base64"
"encoding/json"
"errors"
"git.gorlug.de/code/golang/ersteller-lib"
"git.gorlug.de/code/golang/ersteller-lib/authentication"
"git.gorlug.de/code/golang/ersteller-lib/ersteller"
"git.gorlug.de/code/golang/ersteller-lib/ersteller/authentication"
"github.com/gorilla/sessions"
"github.com/labstack/echo/v4"
"golang.org/x/oauth2"
@@ -35,7 +35,7 @@ type Auth struct {
isLocal bool
userRepo authentication.UserRepository
sessionStore *sessions.CookieStore
GoogleLoginRoute ersteller_lib.Route
GoogleLoginRoute ersteller.Route
environment AuthEnv
}
@@ -64,10 +64,10 @@ func (a *Auth) GetAuthURL(state string) string {
func (a *Auth) ParseUserData(code string) (GoogleUserData, error) {
data, err := a.getUserDataFromGoogle(code)
if err != nil {
ersteller_lib.LogError("failed getting user data from Google: %v", err)
ersteller.LogError("failed getting user data from Google: %v", err)
return GoogleUserData{}, err
}
ersteller_lib.LogDebug("user data: %v", data)
ersteller.LogDebug("user data: %v", data)
return data, nil
}
@@ -75,25 +75,25 @@ func (a *Auth) getUserDataFromGoogle(code string) (GoogleUserData, error) {
// Use code to get token and get user info from Google.
token, err := a.Config.Exchange(context.Background(), code)
if err != nil {
ersteller_lib.LogError("code exchange wrong: %v", err)
ersteller.LogError("code exchange wrong: %v", err)
return GoogleUserData{}, err
}
response, err := http.Get(oauthGoogleUrlAPI + token.AccessToken)
if err != nil {
ersteller_lib.LogError("failed getting user info: %v", err)
ersteller.LogError("failed getting user info: %v", err)
return GoogleUserData{}, nil
}
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
if err != nil {
ersteller_lib.LogError("failed read response: %v", err)
ersteller.LogError("failed read response: %v", err)
return GoogleUserData{}, nil
}
userData := GoogleUserData{}
err = json.Unmarshal(contents, &userData)
if err != nil {
ersteller_lib.LogError("failed to unmarshal user data: %v", err)
ersteller.LogError("failed to unmarshal user data: %v", err)
return GoogleUserData{}, nil
}
userData.Token = token
@@ -102,10 +102,10 @@ func (a *Auth) getUserDataFromGoogle(code string) (GoogleUserData, error) {
}
func (a *Auth) SaveCredentials(userId int, token *oauth2.Token) error {
ersteller_lib.Debug("saving google credentials for user ", userId)
ersteller.Debug("saving google credentials for user ", userId)
googleAuth, err := a.repo.ReadByUserId(userId)
if err != nil {
ersteller_lib.LogDebug("no GoogleAuth found for user %d, creating new one", userId)
ersteller.LogDebug("no GoogleAuth found for user %d, creating new one", userId)
_, err = a.repo.Create(GoogleAuth{
UserId: userId,
Credentials: Credentials{
@@ -121,11 +121,11 @@ func (a *Auth) SaveCredentials(userId int, token *oauth2.Token) error {
func (a *Auth) GetCredentials(userId int) (*oauth2.Token, error) {
credentials, err := a.repo.ReadByUserId(userId)
if err != nil {
ersteller_lib.LogError("failed to get credentials for user %d: %v", userId, err)
ersteller.LogError("failed to get credentials for user %d: %v", userId, err)
return nil, err
}
if credentials.Credentials.Token.AccessToken == "" {
ersteller_lib.LogError("no credentials found for user %d", userId)
ersteller.LogError("no credentials found for user %d", userId)
return nil, errors.New("no credentials found")
}
return &credentials.Credentials.Token, nil
@@ -135,25 +135,25 @@ const oAuthStateCookieName = "oauthstate"
const GoogleLogin = "/login/google"
const GoogleLoginCallback = "/email/authenticated"
func (a *Auth) AddRoutes(e *echo.Echo) []ersteller_lib.Route {
googleLoginRoute := ersteller_lib.NewGetRoute(GoogleLogin, func(c echo.Context) error {
func (a *Auth) AddRoutes(e *echo.Echo) []ersteller.Route {
googleLoginRoute := ersteller.NewGetRoute(GoogleLogin, func(c echo.Context) error {
state := a.generateStateOauthCookie(c.Response())
ersteller_lib.LogDebug("Value: %v", state)
ersteller.LogDebug("Value: %v", state)
authenticationUrl := a.GetAuthURL(state)
return c.Redirect(http.StatusTemporaryRedirect, authenticationUrl)
})
googleLoginRoute.Add(e)
a.GoogleLoginRoute = googleLoginRoute
authenticatedRoute := ersteller_lib.NewGetRoute(GoogleLoginCallback, func(c echo.Context) error {
ersteller_lib.LogDebug("email authenticated called")
authenticatedRoute := ersteller.NewGetRoute(GoogleLoginCallback, func(c echo.Context) error {
ersteller.LogDebug("email authenticated called")
oauthstate, err := c.Cookie(oAuthStateCookieName)
if err != nil {
ersteller_lib.LogError("Failed to get cookie: %v", err)
ersteller.LogError("Failed to get cookie: %v", err)
return err
}
if c.FormValue("state") != oauthstate.Value {
ersteller_lib.LogError("Failed to verify google oauth state")
ersteller.LogError("Failed to verify google oauth state")
return err
}
code := c.FormValue("code")
@@ -163,10 +163,10 @@ func (a *Auth) AddRoutes(e *echo.Echo) []ersteller_lib.Route {
}
userId, err := a.userRepo.GetUserId(data.Email)
if err != nil {
ersteller_lib.LogError("Failed to get user id: %v", err)
ersteller.LogError("Failed to get user id: %v", err)
userId, err = a.userRepo.CreateFromEmail(data.Email)
if err != nil {
ersteller_lib.LogError("Failed to create user: %v", err)
ersteller.LogError("Failed to create user: %v", err)
return err
}
}
@@ -176,36 +176,36 @@ func (a *Auth) AddRoutes(e *echo.Echo) []ersteller_lib.Route {
}
err = a.SaveCredentials(userId, data.Token)
if err != nil {
ersteller_lib.Error("failed to save credentials for user ", userId, ": ", err)
ersteller.Error("failed to save credentials for user ", userId, ": ", err)
return err
}
ersteller_lib.Debug("saved credentials for user", userId)
ersteller.Debug("saved credentials for user", userId)
return c.Redirect(http.StatusTemporaryRedirect, "/")
})
authenticatedRoute.Add(e)
logoutRoute := ersteller_lib.NewGetRoute("/logout", func(c echo.Context) error {
logoutRoute := ersteller.NewGetRoute("/logout", func(c echo.Context) error {
// Clear the session
session, err := a.sessionStore.Get(c.Request(), a.environment.SessionName)
if err != nil {
ersteller_lib.LogError("Failed to get session: %v", err)
ersteller.LogError("Failed to get session: %v", err)
return c.Redirect(http.StatusTemporaryRedirect, "/")
}
session.Options.MaxAge = -1
err = session.Save(c.Request(), c.Response())
if err != nil {
ersteller_lib.LogError("Failed to save session: %v", err)
ersteller.LogError("Failed to save session: %v", err)
return err
}
return c.Redirect(http.StatusTemporaryRedirect, "/")
})
logoutRoute.Add(e)
return []ersteller_lib.Route{googleLoginRoute, authenticatedRoute, logoutRoute}
return []ersteller.Route{googleLoginRoute, authenticatedRoute, logoutRoute}
}
func (a *Auth) saveEmailToSessionStore(c echo.Context, email string, userId int) error {
session, err := a.sessionStore.New(c.Request(), a.environment.SessionName)
if err != nil {
ersteller_lib.LogError("Failed to create session: %v", err)
ersteller.LogError("Failed to create session: %v", err)
return err
}
session.Values = map[interface{}]interface{}{
@@ -214,7 +214,7 @@ func (a *Auth) saveEmailToSessionStore(c echo.Context, email string, userId int)
}
err = session.Save(c.Request(), c.Response())
if err != nil {
ersteller_lib.LogError("Failed to save session: %v", err)
ersteller.LogError("Failed to save session: %v", err)
return err
}
return nil
@@ -224,7 +224,7 @@ func (a *Auth) generateStateOauthCookie(w http.ResponseWriter) string {
b := make([]byte, 16)
_, err := rand.Read(b)
if err != nil {
ersteller_lib.LogError("Failed to read random state: %v", err)
ersteller.LogError("Failed to read random state: %v", err)
}
state := base64.URLEncoding.EncodeToString(b)
@@ -3,12 +3,12 @@ package google
import (
"context"
"errors"
"git.gorlug.de/code/golang/ersteller-lib"
"git.gorlug.de/code/golang/ersteller-lib/ersteller"
"github.com/doug-martin/goqu/v9"
)
func (r *GoogleAuthRepository) ReadByUserId(userId int) (GoogleAuth, error) {
ersteller_lib.Debug("Getting GoogleAuth by userId", userId)
ersteller.Debug("Getting GoogleAuth by userId", userId)
sql, args, _ := r.dialect.From("googleAuth").
Prepared(true).
Select(r.getSelectColumns()...).
@@ -19,7 +19,7 @@ func (r *GoogleAuthRepository) ReadByUserId(userId int) (GoogleAuth, error) {
rows, err := r.connPool.Query(context.Background(), sql, args...)
if err != nil {
ersteller_lib.Error("Failed to get GoogleAuth: ", err)
ersteller.Error("Failed to get GoogleAuth: ", err)
}
defer rows.Close()
if rows.Next() {
@@ -8,7 +8,7 @@ import (
"encoding/json"
"errors"
"fmt"
"git.gorlug.de/code/golang/ersteller-lib"
"git.gorlug.de/code/golang/ersteller-lib/ersteller"
"github.com/doug-martin/goqu/v9"
_ "github.com/doug-martin/goqu/v9/dialect/postgres"
"github.com/doug-martin/goqu/v9/exp"
@@ -42,13 +42,13 @@ func (r *GoogleAuthRepository) Create(googleAuth GoogleAuth) (int, error) {
Returning("id").
ToSQL()
if err != nil {
ersteller_lib.LogError("error creating create GoogleAuth sql: %v", err)
ersteller.LogError("error creating create GoogleAuth sql: %v", err)
return -1, err
}
rows, err := r.connPool.Query(context.Background(), sql, args...)
if err != nil {
ersteller_lib.LogError("error creating GoogleAuth: %v", err)
ersteller.LogError("error creating GoogleAuth: %v", err)
return -1, err
}
defer rows.Close()
@@ -56,11 +56,11 @@ func (r *GoogleAuthRepository) Create(googleAuth GoogleAuth) (int, error) {
if rows.Next() {
err = rows.Scan(&id)
if err != nil {
ersteller_lib.LogError("error scanning User: %v", err)
ersteller.LogError("error scanning User: %v", err)
return -1, err
}
} else {
ersteller_lib.Error("GoogleAuth already exists")
ersteller.Error("GoogleAuth already exists")
return -1, GoogleAuthAlreadyExistsError{GoogleAuth: googleAuth}
}
@@ -83,7 +83,7 @@ func (r *GoogleAuthRepository) getSelectColumns() []any {
}
func (r *GoogleAuthRepository) Read(userId int, id int) (GoogleAuth, error) {
ersteller_lib.Debug("Getting GoogleAuth by id ", id)
ersteller.Debug("Getting GoogleAuth by id ", id)
sql, args, _ := r.dialect.From("googleAuth").
Prepared(true).
Select(r.getSelectColumns()...).
@@ -95,7 +95,7 @@ func (r *GoogleAuthRepository) Read(userId int, id int) (GoogleAuth, error) {
rows, err := r.connPool.Query(context.Background(), sql, args...)
if err != nil {
ersteller_lib.Error("Failed to get GoogleAuth: ", err)
ersteller.Error("Failed to get GoogleAuth: ", err)
}
defer rows.Close()
if rows.Next() {
@@ -162,13 +162,13 @@ func (r *GoogleAuthRepository) Update(userId int, googleAuth GoogleAuth) error {
}).
ToSQL()
if err != nil {
ersteller_lib.LogError("error creating update GoogleAuth sql: %v", err)
ersteller.LogError("error creating update GoogleAuth sql: %v", err)
return err
}
_, err = r.connPool.Exec(context.Background(), sql, args...)
if err != nil {
ersteller_lib.LogError("error updating GoogleAuth: %v", err)
ersteller.LogError("error updating GoogleAuth: %v", err)
return err
}
@@ -184,13 +184,13 @@ func (r *GoogleAuthRepository) Delete(userId int, id int) error {
}).
ToSQL()
if err != nil {
ersteller_lib.LogError("error creating delete GoogleAuth sql: %v", err)
ersteller.LogError("error creating delete GoogleAuth sql: %v", err)
return err
}
_, err = r.connPool.Exec(context.Background(), sql, args...)
if err != nil {
ersteller_lib.LogError("error deleting GoogleAuth: %v", err)
ersteller.LogError("error deleting GoogleAuth: %v", err)
return err
}
@@ -266,7 +266,7 @@ func (r *GoogleAuthRepository) GetPage(params GoogleAuthPaginationParams) ([]Goo
rows, err := r.connPool.Query(context.Background(), sql, args...)
if err != nil {
ersteller_lib.LogError("failed to run sql query: %v", err)
ersteller.LogError("failed to run sql query: %v", err)
return nil, -1, err
}
defer rows.Close()
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"crypto/rand"
"encoding/base64"
"encoding/json"
. "git.gorlug.de/code/golang/ersteller-lib"
"git.gorlug.de/code/golang/ersteller-lib/authentication"
. "git.gorlug.de/code/golang/ersteller-lib/ersteller"
"git.gorlug.de/code/golang/ersteller-lib/ersteller/authentication"
"io/ioutil"
"net/http"
"time"
+10 -10
View File
@@ -2,7 +2,7 @@ package authentication
import (
"context"
"git.gorlug.de/code/golang/ersteller-lib"
"git.gorlug.de/code/golang/ersteller-lib/ersteller"
"github.com/gorilla/sessions"
"github.com/labstack/echo/v4"
"github.com/markbates/goth"
@@ -38,7 +38,7 @@ func RunKeycloakAuth(e *echo.Echo, environment KeycloakEnv, cookieStore *session
// ignore the error for now
openid, err := openidConnect.New(environment.Keycloak.ClientId, environment.Keycloak.ClientSecret, environment.BaseUrl+"/auth/openid-connect/callback", environment.Keycloak.DiscoveryUrl)
if err != nil {
ersteller_lib.Error("Error while initializing OpenID Connect provider: ", err)
ersteller.Error("Error while initializing OpenID Connect provider: ", err)
panic(err)
}
if openid != nil {
@@ -56,12 +56,12 @@ func RunKeycloakAuth(e *echo.Echo, environment KeycloakEnv, cookieStore *session
if userId == -1 {
userId, err = createUser(user, userRepo)
if err != nil {
ersteller_lib.LogError("Failed to create user: %v", err)
ersteller.LogError("Failed to create user: %v", err)
return err
}
ersteller_lib.LogDebug("Created user with id %d", userId)
ersteller.LogDebug("Created user with id %d", userId)
} else {
ersteller_lib.LogError("Failed to get user id: %v", err)
ersteller.LogError("Failed to get user id: %v", err)
return err
}
}
@@ -76,7 +76,7 @@ func RunKeycloakAuth(e *echo.Echo, environment KeycloakEnv, cookieStore *session
// Get the session
session, err := cookieStore.Get(c.Request(), environment.SessionName)
if err != nil {
ersteller_lib.LogError("Failed to get session during logout: %v", err)
ersteller.LogError("Failed to get session during logout: %v", err)
} else {
// Clear session values
session.Values = make(map[interface{}]interface{})
@@ -85,7 +85,7 @@ func RunKeycloakAuth(e *echo.Echo, environment KeycloakEnv, cookieStore *session
// Save the session (this will delete the cookie)
err = session.Save(c.Request(), c.Response())
if err != nil {
ersteller_lib.LogError("Failed to clear session during logout: %v", err)
ersteller.LogError("Failed to clear session during logout: %v", err)
}
}
@@ -105,7 +105,7 @@ func RunKeycloakAuth(e *echo.Echo, environment KeycloakEnv, cookieStore *session
request := c.Request().WithContext(ctx)
// try to get the user without re-authenticating
if gothUser, err := gothic.CompleteUserAuth(c.Response(), c.Request()); err == nil {
ersteller_lib.Debug(gothUser)
ersteller.Debug(gothUser)
return nil
} else {
gothic.BeginAuthHandler(c.Response(), request)
@@ -122,7 +122,7 @@ func createUser(gothUser goth.User, repo UserRepository) (int, error) {
func saveEmailToSessionStore(c echo.Context, sessionStore *sessions.CookieStore, email string, userId int, environment KeycloakEnv) error {
session, err := sessionStore.New(c.Request(), environment.SessionName)
if err != nil {
ersteller_lib.LogError("Failed to create session: %v", err)
ersteller.LogError("Failed to create session: %v", err)
return err
}
session.Values = map[interface{}]interface{}{
@@ -131,7 +131,7 @@ func saveEmailToSessionStore(c echo.Context, sessionStore *sessions.CookieStore,
}
err = session.Save(c.Request(), c.Response())
if err != nil {
ersteller_lib.LogError("Failed to save session: %v", err)
ersteller.LogError("Failed to save session: %v", err)
return err
}
return nil
+9 -9
View File
@@ -1,7 +1,7 @@
package authentication
import (
"git.gorlug.de/code/golang/ersteller-lib"
"git.gorlug.de/code/golang/ersteller-lib/ersteller"
"github.com/labstack/echo/v4"
"maragu.dev/gomponents"
. "maragu.dev/gomponents/html"
@@ -10,22 +10,22 @@ import (
const LoginPath = "/login"
type LoginPage struct {
createPage ersteller_lib.CreatePageFunc
LoginRoute ersteller_lib.GetRoute
createPage ersteller.CreatePageFunc
LoginRoute ersteller.GetRoute
googleLoginUrl string
}
func NewLoginPage(e *echo.Echo, createPage ersteller_lib.CreatePageFunc, googleLoginUrl string) *LoginPage {
func NewLoginPage(e *echo.Echo, createPage ersteller.CreatePageFunc, googleLoginUrl string) *LoginPage {
page := &LoginPage{createPage: createPage, googleLoginUrl: googleLoginUrl}
page.LoginRoute = ersteller_lib.NewGetRoute(LoginPath, page.Render).Add(e)
page.LoginRoute = ersteller.NewGetRoute(LoginPath, page.Render).Add(e)
return page
}
func (l *LoginPage) Render(c echo.Context) error {
return l.createPage(c, ersteller_lib.PageWebsiteMetaData{
Title: ersteller_lib.NewI18nText(map[ersteller_lib.Language]string{
ersteller_lib.En: "Login",
ersteller_lib.De: "Anmelden",
return l.createPage(c, ersteller.PageWebsiteMetaData{
Title: ersteller.NewI18nText(map[ersteller.Language]string{
ersteller.En: "Login",
ersteller.De: "Anmelden",
}),
HideNavigation: true,
}, l.getLoginPage())