From 910e74682f8be31b4cefeafcecdd5ae4dd53aa18 Mon Sep 17 00:00:00 2001 From: Niko Abeler Date: Wed, 3 Aug 2022 20:34:42 +0200 Subject: [PATCH] possibility to open repo in single user mode. #1 --- repository.go | 24 +++++++++++++++++++++++- repository_test.go | 36 ++++++++++++++++++++++++++++++++++++ user.go | 2 +- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/repository.go b/repository.go index bbbf0bb..b14ac8e 100644 --- a/repository.go +++ b/repository.go @@ -20,7 +20,9 @@ var static_files embed.FS var VERSION = "0.0.1" type Repository struct { - name string + name string + single_user_mode bool + active_user string } func CreateRepository(name string) (Repository, error) { @@ -58,7 +60,16 @@ func OpenRepository(name string) (Repository, error) { } return repo, nil +} +func OpenSingleUserRepo(name string, user_name string) (Repository, error) { + repo, err := OpenRepository(name) + if err != nil { + return Repository{}, err + } + repo.single_user_mode = true + repo.active_user = user_name + return repo, nil } func (repo Repository) Dir() string { @@ -73,6 +84,13 @@ func (repo Repository) UsersDir() string { return path.Join(repo.Dir(), "users") } +func (repo Repository) UserUrlPath(user User) string { + if repo.single_user_mode { + return "/" + } + return "/user/" + user.name + "/" +} + func (repo Repository) Template() (string, error) { // load base.html path := path.Join(repo.Dir(), "base.html") @@ -84,6 +102,10 @@ func (repo Repository) Template() (string, error) { } func (repo Repository) Users() ([]User, error) { + if repo.single_user_mode { + return []User{{repo: repo, name: repo.active_user}}, nil + } + userNames := listDir(repo.UsersDir()) users := make([]User, len(userNames)) for i, name := range userNames { diff --git a/repository_test.go b/repository_test.go index 1249ae1..45ac251 100644 --- a/repository_test.go +++ b/repository_test.go @@ -187,3 +187,39 @@ func TestCanGetRepoTemplate(t *testing.T) { t.Error("Template not returned") } } + +func TestCanOpenRepositoryInSingleUserMode(t *testing.T) { + // Create a new user + repoName := testRepoName() + userName := randomUserName() + created_repo, _ := owl.CreateRepository(repoName) + created_repo.CreateUser(userName) + created_repo.CreateUser(randomUserName()) + created_repo.CreateUser(randomUserName()) + + // Open the repository + repo, _ := owl.OpenSingleUserRepo(repoName, userName) + + users, _ := repo.Users() + if len(users) != 1 { + t.Error("Wrong number of users returned, expected 1, got ", len(users)) + } + if users[0].Name() != userName { + t.Error("User name does not match") + } +} + +func TestSingleUserRepoUserUrlPathIsSimple(t *testing.T) { + // Create a new user + repoName := testRepoName() + userName := randomUserName() + created_repo, _ := owl.CreateRepository(repoName) + created_repo.CreateUser(userName) + + // Open the repository + repo, _ := owl.OpenSingleUserRepo(repoName, userName) + user, _ := repo.GetUser(userName) + if user.UrlPath() != "/" { + t.Error("User url is not '/'. Got: ", user.UrlPath()) + } +} diff --git a/user.go b/user.go index b111e77..65480dc 100644 --- a/user.go +++ b/user.go @@ -26,7 +26,7 @@ func (user User) Dir() string { } func (user User) UrlPath() string { - return "/user/" + user.name + "/" + return user.repo.UserUrlPath(user) } func (user User) PostDir() string {