From efd9e2481b5a7c2712b213e0767745b7649b21df Mon Sep 17 00:00:00 2001 From: Priec Date: Mon, 17 Aug 2026 11:05:16 +0200 Subject: [PATCH] global profile comes from server now only --- client | 2 +- common/proto/table_definition.proto | 11 +++++++++-- common/src/proto/descriptor.bin | Bin 184445 -> 184824 bytes common/src/proto/komp_ac.table_definition.rs | 13 ++++++++++--- server | 2 +- web/src/pages/add_table/loader.rs | 4 +++- web/src/pages/admin/admin/loader.rs | 4 +++- .../pages/admin/table_definition/loader.rs | 4 +++- web/src/pages/import_export/common/loader.rs | 4 +++- 9 files changed, 33 insertions(+), 11 deletions(-) diff --git a/client b/client index 421b27e0..7319ea41 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit 421b27e06999420f7db6a0e984cfa7699723f594 +Subproject commit 7319ea4178e68e0f7cdaf52ff1433e55bae91ed4 diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index d31bbba5..717cdcb6 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -308,11 +308,18 @@ message ProfileTreeResponse { // All profiles in the system. repeated Profile profiles = 1; + + // The profile holding the tables every profile shares. Callers browse this + // one when the user has not chosen a profile, so the name is reported here + // rather than being known in advance. + string shared_profile_name = 2; } message GetTableCatalogRequest { - // Selected profile. Omit this field to request the global-only scope. - optional string profile_name = 1; + // Profile whose tables to list, together with the shared tables every + // profile sees. The profile holding the shared tables is named like any + // other, and asking for it lists exactly those. + string profile_name = 1; } message GetTableCatalogResponse { diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index a65fe88d3cdd66e67ff80c5b8ee4037a0b90dd45..7d9b50831af6863895a9bba2cca43dbfdf323da1 100644 GIT binary patch delta 5490 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 M-97U@Ws@)b59QJdVE_OC delta 5117 zcmY*ddvKK172kXAmoK~D=J{o_n*<1p??R?I_}EGmSubOvmXT zn^AB|Wt_>#^mYmoI%-waFtloTG^7dw0VIT0z-mzH2=Yh^=?vi&+TXd4-Sp4jJ@@y! z=bU@)`OfaySK~vg<1O!rNm=^s`Hsn1G2a(|R-1k$kbj+M1-l_^t{#69UVUdWe?I?LpeApm9 z=-9JXERN<%0`g*^zn&tSNCfdfdNC1t>nU0vOba|OMv>6lNOXDK-RWuB=Irc+*(cLh zJd?ivnWly5g+FUrkbbHu+x%pD;oS86>@OB&7w~E}{dDu(CuTJ_%$?KxY1l3hNz|498p+u(LtvcT%LwIvZeTCq+lY%+IfaXv@pJDt8X9ab0JzaUd!#HI#Wo`)W$0_m9|A-J8LaLWS6Bi()dO57I2&*jgKc&b&)NeY) zjk!-LIzsza#$oLzs?v@FK@iY)5Q6)uxXeKa?x)JoQeiwmWG=XjI4nRD7NEAqDlC=5 zIzUwkP0f{YSO?ur1Az-zY&UZp2Px{5IgW$wrpp+8Ml{0im7oGTss!~jikh3oUcI@t zE_fIzC=dNUiu{v=TEAILo6<+o>$E%NoP z?*-5u%fWujrDL4poA{RMO`EA;bd0FR8u?xT-LZTx$0%m%414wFWXgJssy_OOZ|$^8JrJA$G=hK-Jnaez5Q3*&>MJ?7 z14K9JIDn86Ky$-@aCLy<*Ep-*e64BeNthuuK#k*rDex@}{WBDKLB0Hu_)+c*MXR)L zA^SFn`_&Ra@D0%T1_;GLij_Jm1P7_2(o$hO>xwbd6$NOj0#I9RF#>{m))iwecILpQ6AyZmODk1Etl`ZQ|x}STL@`49OQ|vFV(EkbF_%v%#KMae2JNmJ-yLTpugwu^@wT3rZLy5d@8ETzK+1f^BhjR+pp6rknmfgNJ{ zxaEaYxU`nbVl$Ri>B?Fz6V=v5l#-H^gp1!B3m5;rLrlnE!912KT}(#m$_O}?F7r^w+QUG{1#Wsm{aETt(K{p;CX@kRfqoTGV+${ z-6@_+ye=`hO+_TtoWD2tN+$A^j8M<*5)C;lm<+-U%{N>I0ipSZ%V0If`KGk<5fIz~ zH0}UuYs}0?fS|r9F&|BbH_6a{M@If6Mct(I4;IdSrfK%9W{mvvv-6r~%~qM+Vq)$c z8NEVhJIOx2EA8Y9gku2BF@QMcUH8raam>5YPQFR@uwB~kE)b}Ij>;akOZ(l071VZV zyU34|e8+30?Snu_KA`D?fap(aW!y9~KuE2X^`;L3LTarjqA|0<yd+>Uyw3H?qP*{c4#M|{7$ldJbG z2-R>Zy41ZrVp68dg@Hu~b-9WFgise(#A5E&HSF3J^$sDBmtI;ynVPT0Xp6t=lUeZRmFS$0CHfUH$5zXH#BZt(hy<%$lURjjlXImur?0sseSKK>#pKW2h zh%4I1jb0Q?kgy9?f0?LYZ3{l z3;m-K{{uAtUA!v7qY^)!`KwVUBcXpx(%WjxelaaPCWAz`zF&Gl zP#zSUW%$%D4n1AIq$CY&BruN@Tq zHw{WJn%~HI805QkPH_DVGV_mQy~V*_E_F{E;BG2WE zy;1c+pUV*5+ER7j7vjstrNfy#6fO1e$#QY>ShUo`M{Alr5`)n)^?09nX#BF_L>`Hj zd9i}8JQFQrUw649F&4F|V}0V2n_Ka(N&W;Lj9NYXmUBn)Xw>SVc)x3o3D0SPHV&$#M^GkxtAm$9vRbFZ3@FgfK4~c&~PsgSes^Tm0 z#H}m-pU$#G+f;JU1bUl??%XMD zE;012>3HO@=n{9V!GA3I48(9dYrN8tg$1as@kV6|3(#8Qjcvq_B|IX2DeY?J*J5&} h-Lw4^i%@Cz?8FWTjdm|-{=or+LVHKg*W%iL{SOCrnBV{a diff --git a/common/src/proto/komp_ac.table_definition.rs b/common/src/proto/komp_ac.table_definition.rs index 8d503e60..da0117ad 100644 --- a/common/src/proto/komp_ac.table_definition.rs +++ b/common/src/proto/komp_ac.table_definition.rs @@ -224,6 +224,11 @@ pub struct ProfileTreeResponse { /// All profiles in the system. #[prost(message, repeated, tag = "1")] pub profiles: ::prost::alloc::vec::Vec, + /// The profile holding the tables every profile shares. Callers browse this + /// one when the user has not chosen a profile, so the name is reported here + /// rather than being known in advance. + #[prost(string, tag = "2")] + pub shared_profile_name: ::prost::alloc::string::String, } /// Nested message and enum types in `ProfileTreeResponse`. pub mod profile_tree_response { @@ -283,9 +288,11 @@ pub mod profile_tree_response { } #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetTableCatalogRequest { - /// Selected profile. Omit this field to request the global-only scope. - #[prost(string, optional, tag = "1")] - pub profile_name: ::core::option::Option<::prost::alloc::string::String>, + /// Profile whose tables to list, together with the shared tables every + /// profile sees. The profile holding the shared tables is named like any + /// other, and asking for it lists exactly those. + #[prost(string, tag = "1")] + pub profile_name: ::prost::alloc::string::String, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetTableCatalogResponse { diff --git a/server b/server index efcd4b9e..f3efeae0 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit efcd4b9ed04370cf9459bf79dd0360b26eb38d83 +Subproject commit f3efeae04b782b5bef8cf5a4d9827933ac58190d diff --git a/web/src/pages/add_table/loader.rs b/web/src/pages/add_table/loader.rs index 641b4134..b1411b3a 100644 --- a/web/src/pages/add_table/loader.rs +++ b/web/src/pages/add_table/loader.rs @@ -73,7 +73,9 @@ pub(crate) async fn load_page( // to — see `crate::pages::table_scope`. let catalog_tables = definitions .get_table_catalog( - authenticated_request(headers, GetTableCatalogRequest { profile_name: None }) + authenticated_request(headers, GetTableCatalogRequest { + profile_name: crate::pages::GLOBAL_SCOPE.to_string(), + }) .map_err(|_| LoadError::Unauthenticated)?, ) .await diff --git a/web/src/pages/admin/admin/loader.rs b/web/src/pages/admin/admin/loader.rs index 50e0657e..cb27655c 100644 --- a/web/src/pages/admin/admin/loader.rs +++ b/web/src/pages/admin/admin/loader.rs @@ -51,7 +51,9 @@ pub(crate) async fn load_admin_page( let global_tables = table_scope::global_tables( &definitions .get_table_catalog( - authenticated_request(headers, GetTableCatalogRequest { profile_name: None }) + authenticated_request(headers, GetTableCatalogRequest { + profile_name: crate::pages::GLOBAL_SCOPE.to_string(), + }) .map_err(authentication_error)?, ) .await diff --git a/web/src/pages/admin/table_definition/loader.rs b/web/src/pages/admin/table_definition/loader.rs index d8f885be..ebd7170f 100644 --- a/web/src/pages/admin/table_definition/loader.rs +++ b/web/src/pages/admin/table_definition/loader.rs @@ -121,7 +121,9 @@ pub(crate) async fn load_page( // had just listed. let catalog_tables = definitions .get_table_catalog( - authenticated_request(headers, GetTableCatalogRequest { profile_name: None }) + authenticated_request(headers, GetTableCatalogRequest { + profile_name: crate::pages::GLOBAL_SCOPE.to_string(), + }) .map_err(|_| LoadError::Unauthenticated)?, ) .await diff --git a/web/src/pages/import_export/common/loader.rs b/web/src/pages/import_export/common/loader.rs index e3a5f24a..a88d6664 100644 --- a/web/src/pages/import_export/common/loader.rs +++ b/web/src/pages/import_export/common/loader.rs @@ -75,7 +75,9 @@ pub(crate) async fn load_catalog( let global = table_scope::global_tables( &definitions .get_table_catalog( - authenticated_request(headers, GetTableCatalogRequest { profile_name: None }) + authenticated_request(headers, GetTableCatalogRequest { + profile_name: crate::pages::GLOBAL_SCOPE.to_string(), + }) .map_err(|_| LoadError::Unauthenticated)?, ) .await