88 lines
1.6 KiB
Go
88 lines
1.6 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"os/user"
|
||
|
"path/filepath"
|
||
|
//email "git.tilde.town/tildetown/town/email"
|
||
|
townUser "git.tilde.town/tildetown/town/user"
|
||
|
)
|
||
|
|
||
|
const requestPath = "/town/requests"
|
||
|
|
||
|
func _main(args []string) error {
|
||
|
currentUser, err := user.Current()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
ok, err := townUser.IsAdmin(currentUser)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if !ok {
|
||
|
return errors.New("must be a town admin")
|
||
|
}
|
||
|
|
||
|
errs := []error{}
|
||
|
errs = append(errs, processGitea(requestPath))
|
||
|
errs = append(errs, processGemini(requestPath))
|
||
|
|
||
|
if len(errs) > 0 {
|
||
|
errMsg := "errors encountered during request processing: "
|
||
|
for _, e := range errs {
|
||
|
errMsg += e.Error() + " "
|
||
|
}
|
||
|
return fmt.Errorf("errors encountered during request processing: %s", errMsg)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
retcode := 0
|
||
|
|
||
|
err := _main(os.Args)
|
||
|
if err != nil {
|
||
|
fmt.Fprintln(os.Stderr, err.Error())
|
||
|
retcode = 1
|
||
|
}
|
||
|
|
||
|
os.Exit(retcode)
|
||
|
}
|
||
|
|
||
|
func processGitea(rp string) error {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func processGemini(requestRootPath string) error {
|
||
|
rp := filepath.Join(requestRootPath, "gemini")
|
||
|
|
||
|
files, err := ioutil.ReadDir(rp)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("failed to list directory %s: %w", rp, err)
|
||
|
}
|
||
|
|
||
|
usernames := []string{}
|
||
|
|
||
|
for _, file := range files {
|
||
|
usernames = append(usernames, file.Name())
|
||
|
}
|
||
|
|
||
|
if len(usernames) == 0 {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
for _, username := range usernames {
|
||
|
// TODO check for public_gemini already in their home dir
|
||
|
// TODO create publiC_gemini
|
||
|
// TODO check for existing symlink
|
||
|
// TODO create symlink
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|