owl-blogs/repository.go

74 lines
1.6 KiB
Go
Raw Normal View History

2022-07-20 17:17:42 +00:00
package kiss
import (
2022-07-23 07:11:25 +00:00
_ "embed"
2022-07-20 17:17:42 +00:00
"fmt"
"os"
"path"
)
2022-07-23 07:11:25 +00:00
//go:embed embed/base.html
var base_template string
2022-07-23 13:17:14 +00:00
var VERSION = "0.0.1"
2022-07-23 07:11:25 +00:00
2022-07-20 17:17:42 +00:00
type Repository struct {
name string
}
func CreateRepository(name string) (Repository, error) {
2022-07-20 17:33:22 +00:00
newRepo := Repository{name: name}
2022-07-20 17:17:42 +00:00
// check if repository already exists
2022-07-20 17:33:22 +00:00
if dirExists(newRepo.Dir()) {
2022-07-20 17:17:42 +00:00
return Repository{}, fmt.Errorf("Repository already exists")
}
os.Mkdir(name, 0755)
2022-07-20 17:35:31 +00:00
os.Mkdir(path.Join(name, "users"), 0755)
2022-07-20 17:33:22 +00:00
return newRepo, nil
2022-07-20 17:17:42 +00:00
}
2022-07-23 07:00:10 +00:00
func OpenRepository(name string) (Repository, error) {
repo := Repository{name: name}
if !dirExists(repo.Dir()) {
return Repository{}, fmt.Errorf("Repository does not exist")
}
return repo, nil
}
2022-07-20 17:17:42 +00:00
func (repo Repository) Dir() string {
return repo.name
}
2022-07-20 17:35:31 +00:00
func (repo Repository) Users() ([]User, error) {
userNames := listDir(path.Join(repo.Dir(), "users"))
users := make([]User, len(userNames))
for i, name := range userNames {
users[i] = User{repo: repo, name: name}
}
return users, nil
2022-07-20 17:17:42 +00:00
}
2022-07-20 17:35:31 +00:00
func (repo Repository) CreateUser(name string) (User, error) {
2022-07-20 17:17:42 +00:00
new_user := User{repo: repo, name: name}
// check if user already exists
2022-07-20 17:33:22 +00:00
if dirExists(new_user.Dir()) {
2022-07-20 17:17:42 +00:00
return User{}, fmt.Errorf("User already exists")
}
// creates repo/name folder if it doesn't exist
user_dir := new_user.Dir()
os.Mkdir(user_dir, 0755)
os.Mkdir(path.Join(user_dir, "meta"), 0755)
// create public folder
os.Mkdir(path.Join(user_dir, "public"), 0755)
// create Meta files
2022-07-23 13:17:14 +00:00
os.WriteFile(path.Join(user_dir, "meta", "VERSION"), []byte(VERSION), 0644)
2022-07-21 17:44:07 +00:00
os.WriteFile(path.Join(user_dir, "meta", "base.html"), []byte(base_template), 0644)
2022-07-20 17:17:42 +00:00
return new_user, nil
}