Răsfoiți Sursa

Disallow subscribing to /docs

Philipp Heckel 4 ani în urmă
părinte
comite
b437a87266
2 a modificat fișierele cu 16 adăugiri și 2 ștergeri
  1. 6 2
      server/server.go
  2. 10 0
      util/util.go

+ 6 - 2
server/server.go

@@ -81,8 +81,9 @@ var (
 	sseRegex   = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/sse$`)
 	rawRegex   = regexp.MustCompile(`^/[-_A-Za-z0-9]{1,64}(,[-_A-Za-z0-9]{1,64})*/raw$`)
 
-	staticRegex = regexp.MustCompile(`^/static/.+`)
-	docsRegex   = regexp.MustCompile(`^/docs(|/.*)$`)
+	staticRegex      = regexp.MustCompile(`^/static/.+`)
+	docsRegex        = regexp.MustCompile(`^/docs(|/.*)$`)
+	disallowedTopics = []string{"docs", "static"}
 
 	//go:embed "index.gohtml"
 	indexSource   string
@@ -496,6 +497,9 @@ func (s *Server) topicsFromIDs(ids ...string) ([]*topic, error) {
 	defer s.mu.Unlock()
 	topics := make([]*topic, 0)
 	for _, id := range ids {
+		if util.InStringList(disallowedTopics, id) {
+			return nil, errHTTPBadRequest
+		}
 		if _, ok := s.topics[id]; !ok {
 			if len(s.topics) >= s.config.GlobalTopicLimit {
 				return nil, errHTTPTooManyRequests

+ 10 - 0
util/util.go

@@ -23,6 +23,16 @@ func FileExists(filename string) bool {
 	return stat != nil
 }
 
+// InStringList returns true if needle is contained in haystack
+func InStringList(haystack []string, needle string) bool {
+	for _, s := range haystack {
+		if s == needle {
+			return true
+		}
+	}
+	return false
+}
+
 // RandomString returns a random string with a given length
 func RandomString(length int) string {
 	randomMutex.Lock() // Who would have thought that random.Intn() is not thread-safe?!