Miki Tebeka avatar Miki Tebeka committed d550ca6

Mask

Comments (0)

Files changed (1)

 	"net/http"
 	"os"
 	"path/filepath"
+	"regexp"
 	"strings"
 	"sync"
 	"time"
 )
 
 const (
-	Version = "0.3.1"
+	Version = "0.4.0"
 )
 
 var ResourceMap map[string]Resource = nil
 var initMutex sync.Mutex
+var urlMask *regexp.Regexp
 
 func loadMap() (map[string]Resource, error) {
 	this := os.Args[0]
 
 type handler int
 
+func isMasked(path string) bool {
+	if urlMask == nil {
+		return false
+	}
+
+	return urlMask.MatchString(path)
+}
+
 func (h handler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
-	rsc := Get(req.URL.Path)
+	path := req.URL.Path
+	if isMasked(path) {
+		http.Error(w, fmt.Sprintf("Unauthorized - %s", path), http.StatusUnauthorized)
+		return
+	}
+
+	rsc := Get(path)
 	if rsc == nil {
 		http.NotFound(w, req)
 		return
 	}
 	return t, nil
 }
+
+// Mask masks URLs from being served (the HTTP server will return 401 Unauthorized)
+func Mask(mask *regexp.Regexp) {
+	urlMask = mask
+}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.