summaryrefslogtreecommitdiff
path: root/internal/server/repository/repository.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-08-14 10:10:18 +0300
committerPaul Buetow <paul@buetow.org>2024-08-14 10:10:18 +0300
commitca2c0045ed86f8c9bc6dccaf20c9e2c2c0fae3f8 (patch)
tree2411cca5764b9aacf229ff61bc46a39fd8c65f0d /internal/server/repository/repository.go
parenta43042d48cfbf46f42b1df08e94903ee69d48aed (diff)
move regex check to repository from handler
Diffstat (limited to 'internal/server/repository/repository.go')
-rw-r--r--internal/server/repository/repository.go14
1 files changed, 12 insertions, 2 deletions
diff --git a/internal/server/repository/repository.go b/internal/server/repository/repository.go
index 6c0a9e3..464d11a 100644
--- a/internal/server/repository/repository.go
+++ b/internal/server/repository/repository.go
@@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"log"
+ "regexp"
"sync"
"time"
@@ -37,6 +38,7 @@ type Repository struct {
mu *sync.Mutex
fs fs
loaded *bool
+ getIdRe *regexp.Regexp
}
func Instance(conf server.ServerConfig) Repository {
@@ -58,6 +60,8 @@ func newRepository(conf server.ServerConfig, fs fs) Repository {
mu: &sync.Mutex{},
fs: fs,
loaded: &loaded,
+ getIdRe: regexp.MustCompile(`^[a-z0-9]{64}$`),
+ // getIdRe: regexp.MustCompile(`^/[0-9]{4}/[a-z0-9]{64}\.json$`),
}
}
@@ -134,13 +138,19 @@ func (r Repository) ListBytes() ([]byte, error) {
return json.Marshal(pairs)
}
-func (r Repository) Get(id string) (types.Entry, bool) {
+func (r Repository) Get(id string) (types.Entry, error) {
+ if !r.getIdRe.MatchString(id) {
+ return types.Entry{}, fmt.Errorf("invalid id %s", id)
+ }
_ = r.load()
r.mu.Lock()
defer r.mu.Unlock()
ent, ok := r.entries[id]
- return ent, ok
+ if !ok {
+ return ent, fmt.Errorf("no entry with id %s found", id)
+ }
+ return ent, nil
}
func (r Repository) hasSameEntry(pair entryPair) bool {