diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2014-01-15 05:49:31 (JST) |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2014-01-16 10:28:12 (JST) |
commit | d6e9200cc35411f3f27426b608bcfdef9348e6d3 (patch) | |
tree | 9cdd921b03465458d10b99ff4357f79a810501c0 /filter.c | |
parent | 3741254a6989b2837cd8d20480f152f0096bcb9a (diff) | |
download | cgit-d6e9200cc35411f3f27426b608bcfdef9348e6d3.zip cgit-d6e9200cc35411f3f27426b608bcfdef9348e6d3.tar.gz |
auth: add basic authentication filter framework
This leverages the new lua support. See
filters/simple-authentication.lua for explaination of how this works.
There is also additional documentation in cgitrc.5.txt.
Though this is a cookie-based approach, cgit's caching mechanism is
preserved for authenticated pages.
Very plugable and extendable depending on user needs.
The sample script uses an HMAC-SHA1 based cookie to store the
currently logged in user, with an expiration date.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'filter.c')
-rw-r--r-- | filter.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -244,6 +244,11 @@ static int html_url_arg_lua_filter(lua_State *lua_state) | |||
244 | return hook_lua_filter(lua_state, html_url_arg); | 244 | return hook_lua_filter(lua_state, html_url_arg); |
245 | } | 245 | } |
246 | 246 | ||
247 | static int html_include_lua_filter(lua_State *lua_state) | ||
248 | { | ||
249 | return hook_lua_filter(lua_state, (void (*)(const char *))html_include); | ||
250 | } | ||
251 | |||
247 | static void cleanup_lua_filter(struct cgit_filter *base) | 252 | static void cleanup_lua_filter(struct cgit_filter *base) |
248 | { | 253 | { |
249 | struct lua_filter *filter = (struct lua_filter *)base; | 254 | struct lua_filter *filter = (struct lua_filter *)base; |
@@ -279,6 +284,8 @@ static int init_lua_filter(struct lua_filter *filter) | |||
279 | lua_setglobal(filter->lua_state, "html_url_path"); | 284 | lua_setglobal(filter->lua_state, "html_url_path"); |
280 | lua_pushcfunction(filter->lua_state, html_url_arg_lua_filter); | 285 | lua_pushcfunction(filter->lua_state, html_url_arg_lua_filter); |
281 | lua_setglobal(filter->lua_state, "html_url_arg"); | 286 | lua_setglobal(filter->lua_state, "html_url_arg"); |
287 | lua_pushcfunction(filter->lua_state, html_include_lua_filter); | ||
288 | lua_setglobal(filter->lua_state, "html_include"); | ||
282 | 289 | ||
283 | if (luaL_dofile(filter->lua_state, filter->script_file)) { | 290 | if (luaL_dofile(filter->lua_state, filter->script_file)) { |
284 | error_lua_filter(filter); | 291 | error_lua_filter(filter); |
@@ -409,6 +416,10 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype) | |||
409 | colon = NULL; | 416 | colon = NULL; |
410 | 417 | ||
411 | switch (filtertype) { | 418 | switch (filtertype) { |
419 | case AUTH: | ||
420 | argument_count = 11; | ||
421 | break; | ||
422 | |||
412 | case EMAIL: | 423 | case EMAIL: |
413 | argument_count = 2; | 424 | argument_count = 2; |
414 | break; | 425 | break; |