diff options
| author | Jason A. Donenfeld | 2014-01-14 21:49:31 +0100 |
|---|---|---|
| committer | Jason A. Donenfeld | 2014-01-16 02:28:12 +0100 |
| commit | d6e9200cc35411f3f27426b608bcfdef9348e6d3 (patch) | |
| tree | 9cdd921b03465458d10b99ff4357f79a810501c0 /filter.c | |
| parent | 3741254a6989b2837cd8d20480f152f0096bcb9a (diff) | |
| download | cgit-d6e9200cc35411f3f27426b608bcfdef9348e6d3.tar.gz cgit-d6e9200cc35411f3f27426b608bcfdef9348e6d3.tar.bz2 cgit-d6e9200cc35411f3f27426b608bcfdef9348e6d3.zip | |
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; |
