diff options
| author | Chris Lu <chris.lu@gmail.com> | 2019-03-03 10:17:44 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2019-03-03 10:17:44 -0800 |
| commit | 219b651bc3642b74e5ffd824a0fedc904ec9796c (patch) | |
| tree | 667d3ce070c9b95608b52dc389764a2aceb5d6fd /weed | |
| parent | 2812c14520b75b0f89195108c8c54424587f0d6d (diff) | |
| download | seaweedfs-219b651bc3642b74e5ffd824a0fedc904ec9796c.tar.xz seaweedfs-219b651bc3642b74e5ffd824a0fedc904ec9796c.zip | |
jwt check the base file id
fix https://github.com/chrislusf/seaweedfs/issues/867
Diffstat (limited to 'weed')
| -rw-r--r-- | weed/server/common_test.go | 31 | ||||
| -rw-r--r-- | weed/server/volume_server_handlers.go | 4 |
2 files changed, 35 insertions, 0 deletions
diff --git a/weed/server/common_test.go b/weed/server/common_test.go new file mode 100644 index 000000000..2e6c70bfe --- /dev/null +++ b/weed/server/common_test.go @@ -0,0 +1,31 @@ +package weed_server + +import ( + "strings" + "testing" +) + +func TestParseURL(t *testing.T) { + if vid, fid, _, _, _ := parseURLPath("/1,06dfa8a684"); true { + if vid != "1" { + t.Errorf("fail to parse vid: %s", vid) + } + if fid != "06dfa8a684" { + t.Errorf("fail to parse fid: %s", fid) + } + } + if vid, fid, _, _, _ := parseURLPath("/1,06dfa8a684_1"); true { + if vid != "1" { + t.Errorf("fail to parse vid: %s", vid) + } + if fid != "06dfa8a684_1" { + t.Errorf("fail to parse fid: %s", fid) + } + if sepIndex := strings.LastIndex(fid, "_"); sepIndex > 0 { + fid = fid[:sepIndex] + } + if fid != "06dfa8a684" { + t.Errorf("fail to parse fid: %s", fid) + } + } +} diff --git a/weed/server/volume_server_handlers.go b/weed/server/volume_server_handlers.go index 0e9aaeb3b..d23c08290 100644 --- a/weed/server/volume_server_handlers.go +++ b/weed/server/volume_server_handlers.go @@ -2,6 +2,7 @@ package weed_server import ( "net/http" + "strings" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/security" @@ -71,6 +72,9 @@ func (vs *VolumeServer) maybeCheckJwtAuthorization(r *http.Request, vid, fid str } if sc, ok := token.Claims.(*security.SeaweedFileIdClaims); ok { + if sepIndex := strings.LastIndex(fid, "_"); sepIndex > 0 { + fid = fid[:sepIndex] + } return sc.Fid == vid+","+fid } glog.V(1).Infof("unexpected jwt from %s: %v", r.RemoteAddr, tokenStr) |
