summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/config.go1
-rw-r--r--readme4
-rw-r--r--routes/routes.go39
-rw-r--r--routes/util.go26
4 files changed, 60 insertions, 10 deletions
diff --git a/config/config.go b/config/config.go
index 8632af8..3119352 100644
--- a/config/config.go
+++ b/config/config.go
@@ -12,6 +12,7 @@ type Config struct {
ScanPath string `yaml:"scanPath"`
Readme []string `yaml:"readme"`
MainBranch []string `yaml:"mainBranch"`
+ Ignore []string `yaml:"ignore,omitempty"`
} `yaml:"repo"`
Dirs struct {
Templates string `yaml:"templates"`
diff --git a/readme b/readme
index fe18119..a37b983 100644
--- a/readme
+++ b/readme
@@ -39,6 +39,9 @@ Example config.yaml:
mainBranch:
- master
- main
+ ignore:
+ - foo
+ - bar
dirs:
templates: ./templates
static: ./static
@@ -56,6 +59,7 @@ These options are fairly self-explanatory, but of note are:
traverse subdirs yet.
• repo.readme: readme files to look for. Markdown isn't rendered.
• repo.mainBranch: main branch names to look for.
+• repo.ignore: repos to ignore.
• server.name: used for go-import meta tags and clone URLs.
diff --git a/routes/routes.go b/routes/routes.go
index c2d80dd..30f101a 100644
--- a/routes/routes.go
+++ b/routes/routes.go
@@ -35,6 +35,10 @@ func (d *deps) Index(w http.ResponseWriter, r *http.Request) {
infos := []info{}
for _, dir := range dirs {
+ if d.isIgnored(dir.Name()) {
+ continue
+ }
+
path := filepath.Join(d.c.Repo.ScanPath, dir.Name())
gr, err := git.Open(path, "")
if err != nil {
@@ -77,8 +81,13 @@ func (d *deps) Index(w http.ResponseWriter, r *http.Request) {
func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) {
name := flow.Param(r.Context(), "name")
+ if d.isIgnored(name) {
+ d.Write404(w)
+ return
+ }
name = filepath.Clean(name)
path := filepath.Join(d.c.Repo.ScanPath, name)
+
gr, err := git.Open(path, "")
if err != nil {
d.Write404(w)
@@ -136,6 +145,10 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) {
func (d *deps) RepoTree(w http.ResponseWriter, r *http.Request) {
name := flow.Param(r.Context(), "name")
+ if d.isIgnored(name) {
+ d.Write404(w)
+ return
+ }
treePath := flow.Param(r.Context(), "...")
ref := flow.Param(r.Context(), "ref")
@@ -166,6 +179,10 @@ func (d *deps) RepoTree(w http.ResponseWriter, r *http.Request) {
func (d *deps) FileContent(w http.ResponseWriter, r *http.Request) {
name := flow.Param(r.Context(), "name")
+ if d.isIgnored(name) {
+ d.Write404(w)
+ return
+ }
treePath := flow.Param(r.Context(), "...")
ref := flow.Param(r.Context(), "ref")
@@ -190,6 +207,10 @@ func (d *deps) FileContent(w http.ResponseWriter, r *http.Request) {
func (d *deps) Log(w http.ResponseWriter, r *http.Request) {
name := flow.Param(r.Context(), "name")
+ if d.isIgnored(name) {
+ d.Write404(w)
+ return
+ }
ref := flow.Param(r.Context(), "ref")
path := filepath.Join(d.c.Repo.ScanPath, name)
@@ -224,6 +245,10 @@ func (d *deps) Log(w http.ResponseWriter, r *http.Request) {
func (d *deps) Diff(w http.ResponseWriter, r *http.Request) {
name := flow.Param(r.Context(), "name")
+ if d.isIgnored(name) {
+ d.Write404(w)
+ return
+ }
ref := flow.Param(r.Context(), "ref")
path := filepath.Join(d.c.Repo.ScanPath, name)
@@ -261,6 +286,10 @@ func (d *deps) Diff(w http.ResponseWriter, r *http.Request) {
func (d *deps) Refs(w http.ResponseWriter, r *http.Request) {
name := flow.Param(r.Context(), "name")
+ if d.isIgnored(name) {
+ d.Write404(w)
+ return
+ }
path := filepath.Join(d.c.Repo.ScanPath, name)
gr, err := git.Open(path, "")
@@ -305,13 +334,3 @@ func (d *deps) ServeStatic(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, f)
}
-
-func getDescription(path string) (desc string) {
- db, err := os.ReadFile(filepath.Join(path, "description"))
- if err == nil {
- desc = string(db)
- } else {
- desc = ""
- }
- return
-}
diff --git a/routes/util.go b/routes/util.go
new file mode 100644
index 0000000..d3f80fe
--- /dev/null
+++ b/routes/util.go
@@ -0,0 +1,26 @@
+package routes
+
+import (
+ "os"
+ "path/filepath"
+)
+
+func getDescription(path string) (desc string) {
+ db, err := os.ReadFile(filepath.Join(path, "description"))
+ if err == nil {
+ desc = string(db)
+ } else {
+ desc = ""
+ }
+ return
+}
+
+func (d *deps) isIgnored(name string) bool {
+ for _, i := range d.c.Repo.Ignore {
+ if name == i {
+ return true
+ }
+ }
+
+ return false
+}