11local usersInactiveKey = KEYS[1]
22local exTime = ARGV[1]
3-
4- -- #var defs
3+ ---
4+ -- var defs
5+ ---
56local delimiter = '{{ KEY_SEPARATOR }} '
67local keyPrefix = '{{ keyPrefix }} '
78
@@ -11,6 +12,7 @@ local ssoProviders = {
1112 {{ /each }}
1213};
1314
15+ -- key templates
1416local usersDataKeyTemplate = '{{ keyTemplates.USERS_DATA }} '
1517local usersMetaKeyTemplate = '{{ keyTemplates.USERS_METADATA }} '
1618local usersTokenKeyTemplate = '{{ keyTemplates.USERS_TOKENS }} '
@@ -21,23 +23,23 @@ local organizationsMembersKeyTemplate = '{{ keyTemplates.ORGANIZATIONS_MEMBERS }
2123local organizationsMemberKeyTemplate = '{{ keyTemplates.ORGANIZATIONS_MEMBER }} '
2224local organizationMemberTemplate = '{{ templates.ORGANIZATIONS_MEMBER }} '
2325
26+ -- simple keys
2427local usersAliasToIDKey = '{{ keys.USERS_ALIAS_TO_ID }} '
2528local usersUsernameToIDKey = '{{ keys.USERS_USERNAME_TO_ID }} '
2629local usersSSOToIDKey = '{{ keys.USERS_SSO_TO_ID }} '
2730
31+ -- indexes
2832local organizationsInvitationIndex = '{{ keys.ORGANIZATIONS_INVITATIONS_INDEX }} '
29-
3033local usersPublicIndex = '{{ keys.USERS_PUBLIC_INDEX }} '
3134local usersIndex = '{{ keys.USERS_INDEX }} '
3235
33- local usersThrottleKeyPrefix = '{{ keys.THROTTLE_PREFIX }} '
34-
36+ -- fields
3537local usersUsernameField = '{{ fields.USERS_USERNAME_FIELD }} '
3638local usersAliasField = '{{ fields.USERS_ALIAS_FIELD }} '
37- -- /var defs
39+
3840
3941---
40- --- Helper functions
42+ -- Helper functions
4143---
4244local function isempty(s)
4345 return s == nil or s == '' or s == false;
@@ -52,11 +54,12 @@ local function decode(strval)
5254 end
5355end
5456
55- -- key generators
57+ -- key generator
5658local function key(...)
5759 return table.concat(arg, delimiter)
5860end
5961
62+ -- key from template generator
6063local function makeKey(template, templateValues)
6164 local str = template
6265 for param, value in pairs(templateValues) do
@@ -65,14 +68,14 @@ local function makeKey(template, templateValues)
6568 return str
6669end
6770
68-
71+ -- gets user data
6972local function getData(key)
7073 local fields = { usersUsernameField, usersAliasField, unpack(ssoProviders) }
7174 local data = redis.call("HMGET", key, unpack(fields))
7275
7376 if #data > 0 then
7477 local result = {};
75- --convert into table
78+ --convert to table
7679 for i = 1, #data, 1 do
7780 result[fields[i]] = data[i]
7881 end
@@ -82,6 +85,11 @@ local function getData(key)
8285 return nil
8386end
8487
88+ ---
89+ -- Script logic functions
90+ ---
91+
92+ -- deletes organization bindings
8593local function deleteOrganizationMember(username)
8694 local userOrganizationsKey = makeKey(usersOrganizationsKeyTemplate, { username = username })
8795 local organizationIds = redis.call("HKEYS", userOrganizationsKey)
@@ -100,21 +108,28 @@ local function deleteOrganizationMember(username)
100108
101109end
102110
111+ -- handles emails (usernames)
112+ local inactiveUserNames = {}
113+
103114-- delete logic
104115local function deleteUser(userID, userData)
105116 local alias = userData[usersAliasField]
106117 local username = userData[usersUsernameField]
107118
119+ -- save username
120+ table.insert(inactiveUserNames, username)
121+
122+ -- delete alias
108123 if isempty(alias) == false then
109124 redis.call("HDEL", usersAliasToIDKey, alias, string.lower(alias))
110125 end
111126
112- --almost impossible but
113- if isempty(username) == false then
114- redis.call("HDEL", usersUsernameToIDKey, username)
115- deleteOrganizationMember(username)
116- end
127+ redis.call("HDEL", usersUsernameToIDKey, username)
128+
129+ -- if user assigned to organization
130+ deleteOrganizationMember(username)
117131
132+ -- delete SSO data
118133 for k, provider in pairs(ssoProviders) do
119134 local rawData = userData[provider]
120135 local providerData = decode(rawData)
@@ -131,7 +146,7 @@ local function deleteUser(userID, userData)
131146 local userDataKey = makeKey(usersDataKeyTemplate, { id = userID })
132147 redis.call("DEL", userDataKey)
133148
134- -- delete meta
149+ -- delete meta data
135150 local usersAudienceKey = makeKey(usersAudienceKeyTemplate, { id = userID })
136151 local userAudiences = redis.call("SMEMBERS", usersAudienceKey)
137152
@@ -144,16 +159,15 @@ local function deleteUser(userID, userData)
144159 local userTokensKey = makeKey(usersTokenKeyTemplate, { id = userID })
145160 redis.call("DEL", userTokensKey)
146161
162+ -- delete user audiences list
147163 redis.call("DEL", usersAudienceKey)
148164
149- -- throttle constants
150- {{#each throttle_actions}}
151- redis.call("DEL", key(userThrottleKeyPrefix, {{this}}, userID))
152- {{/each}}
153-
154165end
155166
156- -- Command body
167+ ---
168+ -- Script Logic
169+ ---
170+
157171redis.replicate_commands();
158172
159173local inactiveUsers = redis.call("ZRANGEBYSCORE", usersInactiveKey, '-inf', exTime)
@@ -171,5 +185,6 @@ for _ , userID in pairs(inactiveUsers) do
171185 redis.call('ZREM', usersInactiveKey, userID)
172186end
173187
174- -- returns count of deleted users
175- return # inactiveUsers
188+ -- returns emails of deleted users
189+ -- helps to remove TokenManager tokens
190+ return inactiveUserNames
0 commit comments