From 7c04b0c30a1b069296f4b563c214bdcf0c6872e2 Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Tue, 29 Jun 2021 15:01:23 +0000 Subject: [PATCH] rgw: Adding missing field to lua scripting adding "User Identity" field to lua scripting Signed-off-by: Matan Breizman --- doc/radosgw/lua-scripting.rst | 6 ++++++ src/rgw/rgw_lua_request.cc | 6 ++++++ src/test/rgw/test_rgw_lua.cc | 20 ++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/doc/radosgw/lua-scripting.rst b/doc/radosgw/lua-scripting.rst index 0f385c46fef..b36e2244a26 100644 --- a/doc/radosgw/lua-scripting.rst +++ b/doc/radosgw/lua-scripting.rst @@ -257,6 +257,12 @@ Request Fields +----------------------------------------------------+----------+--------------------------------------------------------------+----------+-----------+----------+ | ``Request.Tags`` | table | object tags map | yes | no | no | +----------------------------------------------------+----------+--------------------------------------------------------------+----------+-----------+----------+ +| ``Request.User`` | table | user that triggered the request | no | no | no | ++----------------------------------------------------+----------+--------------------------------------------------------------+----------+-----------+----------+ +| ``Request.User.Tenant`` | string | triggering user tenant | no | no | no | ++----------------------------------------------------+----------+--------------------------------------------------------------+----------+-----------+----------+ +| ``Request.User.Id`` | string | triggering user id | no | no | no | ++----------------------------------------------------+----------+--------------------------------------------------------------+----------+-----------+----------+ Request Functions -------------------- diff --git a/src/rgw/rgw_lua_request.cc b/src/rgw/rgw_lua_request.cc index ce7e9235219..a8ea4ee19b2 100644 --- a/src/rgw/rgw_lua_request.cc +++ b/src/rgw/rgw_lua_request.cc @@ -761,6 +761,12 @@ struct RequestMetaTable : public EmptyMetaTable { pushstring(L, s->trans_id); } else if (strcasecmp(index, "Tags") == 0) { create_metatable>(L, false, &(s->tagset.get_tags())); + } else if (strcasecmp(index, "User") == 0) { + if (!s->user) { + lua_pushnil(L); + } else { + create_metatable(L, false, const_cast(&(s->user->get_id()))); + } } else { return error_unknown_field(L, index, TableName()); } diff --git a/src/test/rgw/test_rgw_lua.cc b/src/test/rgw/test_rgw_lua.cc index 9908ff8e5e9..d8cc355c630 100644 --- a/src/test/rgw/test_rgw_lua.cc +++ b/src/test/rgw/test_rgw_lua.cc @@ -494,6 +494,26 @@ TEST(TestRGWLua, Acl) ASSERT_EQ(rc, 0); } +TEST(TestRGWLua, User) +{ + const std::string script = R"( + assert(Request.User) + assert(Request.User.Id == "myid") + assert(Request.User.Tenant == "mytenant") + )"; + + DEFINE_REQ_STATE; + + rgw_user u; + u.tenant = "mytenant"; + u.id = "myid"; + s.user.reset(new sal::RadosUser(nullptr, u)); + + const auto rc = lua::request::execute(nullptr, nullptr, nullptr, &s, "put_obj", script); + ASSERT_EQ(rc, 0); +} + + TEST(TestRGWLua, UseFunction) { const std::string script = R"(