From 413183e4fa923aadf89201321d866e8a3dbcf572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Wed, 6 Jul 2022 22:15:16 +0200 Subject: [PATCH] fix: Delegate storage auth on market nodes --- api/api_storage.go | 3 ++ api/proxy_gen.go | 13 ++++++ build/openrpc/full.json.gz | Bin 28038 -> 28036 bytes build/openrpc/gateway.json.gz | Bin 4894 -> 4893 bytes build/openrpc/miner.json.gz | Bin 13801 -> 13875 bytes build/openrpc/worker.json.gz | Bin 4763 -> 4764 bytes documentation/en/api-v0-methods-miner.md | 20 ++++++++++ node/impl/storminer.go | 12 ++++++ node/rpc.go | 48 ++++++++++++++++------- 9 files changed, 82 insertions(+), 14 deletions(-) diff --git a/api/api_storage.go b/api/api_storage.go index e9e409a7f..197bc71de 100644 --- a/api/api_storage.go +++ b/api/api_storage.go @@ -14,6 +14,7 @@ import ( "github.com/filecoin-project/go-fil-markets/piecestore" "github.com/filecoin-project/go-fil-markets/retrievalmarket" "github.com/filecoin-project/go-fil-markets/storagemarket" + "github.com/filecoin-project/go-jsonrpc/auth" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/builtin/v8/market" "github.com/filecoin-project/go-state-types/builtin/v8/miner" @@ -161,6 +162,8 @@ type StorageMiner interface { StorageLocal(ctx context.Context) (map[storiface.ID]string, error) //perm:admin StorageStat(ctx context.Context, id storiface.ID) (fsutil.FsStat, error) //perm:admin + StorageAuthVerify(ctx context.Context, token string) ([]auth.Permission, error) //perm:read + MarketImportDealData(ctx context.Context, propcid cid.Cid, path string) error //perm:write MarketListDeals(ctx context.Context) ([]*MarketDeal, error) //perm:read MarketListRetrievalDeals(ctx context.Context) ([]retrievalmarket.ProviderDealState, error) //perm:read diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 7df6036c9..401a37ec2 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -854,6 +854,8 @@ type StorageMinerStruct struct { StorageAttach func(p0 context.Context, p1 storiface.StorageInfo, p2 fsutil.FsStat) error `perm:"admin"` + StorageAuthVerify func(p0 context.Context, p1 string) ([]auth.Permission, error) `perm:"read"` + StorageBestAlloc func(p0 context.Context, p1 storiface.SectorFileType, p2 abi.SectorSize, p3 storiface.PathType) ([]storiface.StorageInfo, error) `perm:"admin"` StorageDeclareSector func(p0 context.Context, p1 storiface.ID, p2 abi.SectorID, p3 storiface.SectorFileType, p4 bool) error `perm:"admin"` @@ -5041,6 +5043,17 @@ func (s *StorageMinerStub) StorageAttach(p0 context.Context, p1 storiface.Storag return ErrNotSupported } +func (s *StorageMinerStruct) StorageAuthVerify(p0 context.Context, p1 string) ([]auth.Permission, error) { + if s.Internal.StorageAuthVerify == nil { + return *new([]auth.Permission), ErrNotSupported + } + return s.Internal.StorageAuthVerify(p0, p1) +} + +func (s *StorageMinerStub) StorageAuthVerify(p0 context.Context, p1 string) ([]auth.Permission, error) { + return *new([]auth.Permission), ErrNotSupported +} + func (s *StorageMinerStruct) StorageBestAlloc(p0 context.Context, p1 storiface.SectorFileType, p2 abi.SectorSize, p3 storiface.PathType) ([]storiface.StorageInfo, error) { if s.Internal.StorageBestAlloc == nil { return *new([]storiface.StorageInfo), ErrNotSupported diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 80ccfdb959b996e7fc52cb5ab1327969186fbfb4..8ff1c06f49e820c252d2fdfa2b178936125e60b0 100644 GIT binary patch delta 19611 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 diff --git a/build/openrpc/gateway.json.gz b/build/openrpc/gateway.json.gz index f3ac74b04db98d7c4b8593f7ad3e983076d9a135..e91b9161da5aaeccd7ee95dbdb60ff35af281b73 100644 GIT binary patch delta 4815 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 delta 4816 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 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 6d69891cb2f2e1cc73312a4e97e38124213da9c4..e0537ab248e8a01c6dd88cfa8ba43df6b26bc609 100644 GIT binary patch delta 11912 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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 61a220bdb8c9725d9349299be766fa33d2f926e0..4a724cbe9ccc7a271d529efa3654984da858be2a 100644 GIT binary patch delta 3918 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 delta 3932 zcmV-i52Ns$C7UI%4FiAFS(~!lgBjKso1D}m%vHoZidckt7>fvNZHh!}8x?VgeD1KV zBOq7*OEb!U-QxNhOPh3l@xb&q=auKQO4Cl=y$-C?dA*Zm&6o7lEh=7Gb^ z`5rjvF%E~j73JVbTAtmr#$-Ate7M`bnU=&nBg=;%dD*I@DgA$ZRr(E4W6r5aejeV~ zL;5+BfXxW~;KTOi1*G%vaXj+y(eOL|t8F4q>fj686mf`pLWCYf=%E53N@{*{)UF0z zmyIlBZM2fsNgje0CNn7}lt*3vNu6*R6;N3TaER_XSjzWw@a&&3Y`yaIS%8}O>ba^MZeVn4(UG9L?S zgHoHu*i9P+xVFqx1-J@u72qns^?2Z_jq<_u3nIvcG{k?7|3<6dTze6&Sn}X(VL7~z zYhbf8#wI7w7FORB=9aZrz;DZpxef3e>h`JyE1@aY@5gc?;hva zm;+2q%$k!v4G@2@&Uz0ZF#!Z$S*kho=AC3P{z*DzdJd;6b@CG$2x^a>Iq$DDsP*YY z^X}2Y`N#h8Z)dr(7tTME#T2cknm)zaa@Aihk*+@I(pto+1)>W?4-mbllq32#OicUn z!oH$=Lix6UvTbgcXoi`L$Yd#fKkMT-d-suP0|RbHOH6;IFKmwnsxqEK%R*!pEOcYS z%I*1iS!tJ$nD&Ao&r8sOtzehFQCA@b+dP#RLAr{)xIv-=(`)0bp^XxRg28EQxpmmc zHoBM^HMj>*Q5sn*-l6kVC*W7e_oDVxIvYklb^|A}{~DR&!1vdIva+-l@$5!d?_?=l z?F#lG?md6+j}==tN@bB~(`S{U4DmiJWny90kbbPw<58uus576USJB?8I)fOc`vowe z%~_MG)nH7$Tu+b$g=!ldK0SW;AhqVJm2xJUhMf{lnv=8&JKf-bZ+cr)V4lVQ^=U;} zQt5w)rTp*Jr@2A?YmWZ);e)U0_tv_K~I`(}a( zbXUI;!#0^YGvDc=^k)h|!DmVQR^JeWMzG>(9+K6z!yOYlbQGe8YK6Fl|HYWjM zS@J)WN`C{&QkJn1_P$!=ZBrZ<0|_N<HrpVGK=%KtC#x^mQu8Rnj&Xlz*byK1Ywc)U@B&FFrt5KkM zJ!zTLluTV^pbhlyP}LJ+b^BeV-&F@%zgEe%wJEvMX({P6Re$ZOYEK`iN>V&UQwAfo z+v_TNB>_+JCG2M;)O4*k8fZhUpWlCaO2WRbt9nlv>3T{+bvV>VN_RLMD)ma(9}c=B zebD#ECP%_vdkmo8LIW7I+5m>FH-J&g4PY(Dk%3?`6VR|9G&J8myl_xttFgz&#DZrQ zPXIx!KyZ9@Pk%fAmZ^K%^S4Uf*RuanGjsdUG#&o{$NgQt(l(cWfIxN321JwR1-rK^neey=aq z1KMN&uVg*oXa-PqJ>Xad5Q7C1QfOdP#Dzp$NW_IiTu8))-dJ2{>YuBeYv95D+5 zNk;^L$`Umkxj#fS-nH9pfU-cmnxlf8ahjsQYU24b%2yv09IpO#V?izIUqjr!LG{lt z{+6kK8Wh^4{s~mDACMc|*Rb@z-4*+KjuyZd`+CH_9_g^eKC~ zbmqX*?4i-AGf8>Qm+6Q{6NsbX_5D@Wqs;MR&6swYmK z@d_zLF1bkbT<4b^uQ)~_rCSw;BcaMqISo!KW~DybT295}3FG0<<6BpyY&_jla?{;@ zPhQEjAVV$x80@e11G=KN3;i1jcuvEP<>bB9HvODQ^Ot{ZCf7B$F$tQw*f!ZnaetL< z>n`&-{#CX`%G}(ICHr1iBJO<^_rAV1TpQ{6xOM^Q+~Y(vKTrMz5An-g=@XvjDj!M-|} z>J!+5LrIptAv~MY;EsmhZ39|Eo7tb#b`QV7C@MB@8n&$@?`?Ru zP&C4Wv(AMhx2 zsdq~b^dy@`XND*Krot6emDoZfS5)oB|JPw=-F~5&J)p~AQ9HQ8EIV`AX=~{cc;}4< zHalZ%`qxHof9uh2&go;0Kut{}^V|NcH$sYO<;$8@hC01_7MXidVX~|-Hi65k_Yk4X z)p^L8o&;$oj5rx#8PGIc100e&{Hvkd{#XcV*kEr@9BAAlb5jfTLp_j~0D`Y9)f{^BPI8i4&t;Y|4iwU=8ZPz} zBh!wN$=+-!M&^hkBce+py7bDTOS(F!%7(K5&dY|?n%S@noL($%Sbx{wkYLM#KELq} zCd}&d5oR@qFta8K(%cf;7o_=(697S)U%6M^Q9(Y$mNU6FkUE!Z7_`Uz?epF(WZV&2v)^&LSumWIT8^G$LB7j}k z54`)4gG@zm3MV*(g!9ku19;3wM^;EaDDr?`CBR0i61t=PUnMT2{{X5C36ouDjX#VOcNSxcW+waeu|4s@ygf%gfJPnQ~rW zWT100wYhm~tm@`iYqEWUv$n(jTgF)vdR&#UMjTaBWy#Mx4m!Dx@YDXRH!ewOpf9sK zRd8UzfdvOX7^Vl^e3-sM&>H*K5%6xbjOFBo=zu*!>(bv9OpxdKtIO=MkCD)z_yJ{7 z=xJh-Z>@BgvEWp1M{IeEPZRh%@#}6Nx*_poA?(?#x+EQzO z;jPUse+o8tEH+nh?Q;tr6&>SdU8bhtV0@^~@;JTmwsO7^jduf2&N_oGf}9I-{*uZ0 zP~An&dG~$Ba_)a>M#xwHT++SybYnX=lMNIBw3b9R8wGfq_ zQgHBB0&@46oo_SmKSAGO{(f`xtqjk?OvFsRg$COOR#KqRFOixE3=|mn+Ay$Na30g9)B`yVtRnufVp=#gA}npDD>_DQ+IP| z)%d9c>(xp|#WXa=8lq!a#kT~NZAL3N2PgcB<)dl(C)x5EPBM4#bj!tLR%SoRat=14 zj9A5%RNK7Bj}BErh{RdPbspCB=CoQb_`dru=-qz~d>^Mq$8r{GGlCX#h@M|faO*{( zW`D=ZJ5;NaqBXD4nPyhh?(pV3!=G%PszSpL(ePfu2bOG10tT>$f(IFE)9;|TI@Eh3 zn9%Mwq1}UmFC3#W;l2N1lP`Y?ynxP4cHr+kKljtRY+}4Axnyd*qj;_fbG#+_h7hFy zC$~#Q(GUnO8#s6(yrUJF5!s!-O293$D}Sb?k!hVh`8#d*y{7GzhmM8?pB)9ehW*t| zPV0%~+<)QZnmEujk@;yw(K#{EkInZ-(Hp;lEBq7r-yP-d4e9N9AbhL^O)a}5J4t+P zB-URluD@gqqq*zF6kXAV`o5Qp?fkSTW5^A*M6IJ4*>8qk-DaKa_c!8HNO6?9SbwV& zYn8PT&QZaqG@&hXlFcwz{zPr#9*U`6n52Z}g(wRdSOrS1AiaV4G}*M!@3r=d0hgs)=PA_a0ahiY-9r$VC9U q2#{c{&I9g}5Pya5K#hHCA*p`X-w{;2{{H{~0RR7ItI}&L8UX-jsJ@E; diff --git a/documentation/en/api-v0-methods-miner.md b/documentation/en/api-v0-methods-miner.md index 3fffdb2b8..e565ff1ab 100644 --- a/documentation/en/api-v0-methods-miner.md +++ b/documentation/en/api-v0-methods-miner.md @@ -157,6 +157,7 @@ * [Storage](#Storage) * [StorageAddLocal](#StorageAddLocal) * [StorageAttach](#StorageAttach) + * [StorageAuthVerify](#StorageAuthVerify) * [StorageBestAlloc](#StorageBestAlloc) * [StorageDeclareSector](#StorageDeclareSector) * [StorageDropSector](#StorageDropSector) @@ -3307,6 +3308,25 @@ Inputs: Response: `{}` +### StorageAuthVerify + + +Perms: read + +Inputs: +```json +[ + "string value" +] +``` + +Response: +```json +[ + "write" +] +``` + ### StorageBestAlloc diff --git a/node/impl/storminer.go b/node/impl/storminer.go index 3b753bf82..3b4e1e23e 100644 --- a/node/impl/storminer.go +++ b/node/impl/storminer.go @@ -44,6 +44,7 @@ import ( mktsdagstore "github.com/filecoin-project/lotus/markets/dagstore" "github.com/filecoin-project/lotus/markets/storageadapter" "github.com/filecoin-project/lotus/miner" + "github.com/filecoin-project/lotus/node/modules" "github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/storage" "github.com/filecoin-project/lotus/storage/ctladdr" @@ -97,6 +98,9 @@ type StorageMinerAPI struct { Epp gen.WinningPoStProver `optional:"true"` DS dtypes.MetadataDS + // StorageService is populated when we're not the main storage node (e.g. we're a markets node) + StorageService modules.MinerStorageService `optional:"true"` + ConsiderOnlineStorageDealsConfigFunc dtypes.ConsiderOnlineStorageDealsConfigFunc `optional:"true"` SetConsiderOnlineStorageDealsConfigFunc dtypes.SetConsiderOnlineStorageDealsConfigFunc `optional:"true"` ConsiderOnlineRetrievalDealsConfigFunc dtypes.ConsiderOnlineRetrievalDealsConfigFunc `optional:"true"` @@ -119,6 +123,14 @@ type StorageMinerAPI struct { var _ api.StorageMiner = &StorageMinerAPI{} +func (sm *StorageMinerAPI) StorageAuthVerify(ctx context.Context, token string) ([]auth.Permission, error) { + if sm.StorageService != nil { + return sm.StorageService.AuthVerify(ctx, token) + } + + return sm.AuthVerify(ctx, token) +} + func (sm *StorageMinerAPI) ServeRemote(perm bool) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { if perm == true { diff --git a/node/rpc.go b/node/rpc.go index a67b997e3..bee540500 100644 --- a/node/rpc.go +++ b/node/rpc.go @@ -124,8 +124,6 @@ func FullNodeHandler(a v1api.FullNode, permissioned bool, opts ...jsonrpc.Server // MinerHandler returns a miner handler, to be mounted as-is on the server. func MinerHandler(a api.StorageMiner, permissioned bool) (http.Handler, error) { - m := mux.NewRouter() - mapi := proxy.MetricedStorMinerAPI(a) if permissioned { mapi = api.PermissionedStorMinerAPI(mapi) @@ -136,23 +134,45 @@ func MinerHandler(a api.StorageMiner, permissioned bool) (http.Handler, error) { rpcServer.Register("Filecoin", mapi) rpcServer.AliasMethod("rpc.discover", "Filecoin.Discover") - m.Handle("/rpc/v0", rpcServer) - m.Handle("/rpc/streams/v0/push/{uuid}", readerHandler) - m.PathPrefix("/remote").HandlerFunc(a.(*impl.StorageMinerAPI).ServeRemote(permissioned)) + rootMux := mux.NewRouter() - // debugging - m.Handle("/debug/metrics", metrics.Exporter()) - m.PathPrefix("/").Handler(http.DefaultServeMux) // pprof + // remote storage + { + m := mux.NewRouter() + m.PathPrefix("/remote").HandlerFunc(a.(*impl.StorageMinerAPI).ServeRemote(permissioned)) - if !permissioned { - return m, nil + var hnd http.Handler = m + if permissioned { + hnd = &auth.Handler{ + Verify: a.StorageAuthVerify, + Next: m.ServeHTTP, + } + } + + rootMux.PathPrefix("/remote").Handler(hnd) } - ah := &auth.Handler{ - Verify: a.AuthVerify, - Next: m.ServeHTTP, + // local APIs + { + m := mux.NewRouter() + m.Handle("/rpc/v0", rpcServer) + m.Handle("/rpc/streams/v0/push/{uuid}", readerHandler) + // debugging + m.Handle("/debug/metrics", metrics.Exporter()) + m.PathPrefix("/").Handler(http.DefaultServeMux) // pprof + + var hnd http.Handler = m + if permissioned { + hnd = &auth.Handler{ + Verify: a.AuthVerify, + Next: m.ServeHTTP, + } + } + + rootMux.PathPrefix("/").Handler(hnd) } - return ah, nil + + return rootMux, nil } func handleImport(a *impl.FullNodeAPI) func(w http.ResponseWriter, r *http.Request) {