diff --git a/cgitrc.5.txt b/cgitrc.5.txt index b7dc5a4..6a926aa 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -121,9 +121,9 @@ email-filter:: Specifies a command which will be invoked to format names and email address of committers, authors, and taggers, as represented in various places throughout the cgit interface. This command will receive an - email address as its only command line argument, and the text to - format on STDIN. It is to write the formatted text back out onto - STDOUT. Default value: none. See also: "FILTER API". + email address and an origin page string as its command line arguments, + and the text to format on STDIN. It is to write the formatted text back + out onto STDOUT. Default value: none. See also: "FILTER API". embedded:: Flag which, when set to "1", will make cgit generate a html fragment @@ -620,10 +620,11 @@ commit filter:: expected on standard output. email filter:: - This filter is given a single parameter: the email address of the - relevent user. The filter will then receive the text string to format - on standard input and is expected to write to standard output the - formatted text to be included in the page. + This filter is given two parameters: the email address of the relevent + author and a string indicating the originating page. The filter will + then receive the text string to format on standard input and is + expected to write to standard output the formatted text to be included + in the page. source filter:: This filter is given a single parameter: the filename of the source diff --git a/filter.c b/filter.c index 08ce7a5..aa36026 100644 --- a/filter.c +++ b/filter.c @@ -406,6 +406,9 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype) switch (filtertype) { case EMAIL: + argument_count = 2; + break; + case SOURCE: case ABOUT: argument_count = 1; diff --git a/filters/email-gravatar.lua b/filters/email-gravatar.lua index 8a53447..982e030 100644 --- a/filters/email-gravatar.lua +++ b/filters/email-gravatar.lua @@ -9,7 +9,7 @@ require("crypto") -function filter_open(email) +function filter_open(email, page) buffer = "" md5 = crypto.digest("md5", email:sub(2, -2):lower()) end diff --git a/filters/email-gravatar.py b/filters/email-gravatar.py index 4445615..f90b87d 100755 --- a/filters/email-gravatar.py +++ b/filters/email-gravatar.py @@ -27,6 +27,8 @@ if email[0] == '<': if email[-1] == '>': email = email[0:-1] +page = sys.argv[2] + md5 = hashlib.md5(email.encode()).hexdigest() text = sys.stdin.read().strip() diff --git a/ui-commit.c b/ui-commit.c index bd14ef0..c48bfe8 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -44,7 +44,7 @@ void cgit_print_commit(char *hex, const char *prefix) cgit_print_diff_ctrls(); html("\n"); html("\n"); html("
author"); - cgit_open_filter(ctx.repo->email_filter, info->author_email); + cgit_open_filter(ctx.repo->email_filter, info->author_email, "commit"); html_txt(info->author); if (!ctx.cfg.noplainemail) { html(" "); @@ -55,7 +55,7 @@ void cgit_print_commit(char *hex, const char *prefix) cgit_print_date(info->author_date, FMT_LONGDATE, ctx.cfg.local_time); html("
committer"); - cgit_open_filter(ctx.repo->email_filter, info->committer_email); + cgit_open_filter(ctx.repo->email_filter, info->committer_email, "commit"); html_txt(info->committer); if (!ctx.cfg.noplainemail) { html(" "); diff --git a/ui-log.c b/ui-log.c index 957d887..499534c 100644 --- a/ui-log.c +++ b/ui-log.c @@ -168,7 +168,7 @@ static void print_commit(struct commit *commit, struct rev_info *revs) sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0); show_commit_decorations(commit); html(""); - cgit_open_filter(ctx.repo->email_filter, info->author_email); + cgit_open_filter(ctx.repo->email_filter, info->author_email, "log"); html_txt(info->author); cgit_close_filter(ctx.repo->email_filter); diff --git a/ui-refs.c b/ui-refs.c index d125459..147b665 100644 --- a/ui-refs.c +++ b/ui-refs.c @@ -77,7 +77,7 @@ static int print_branch(struct refinfo *ref) if (ref->object->type == OBJ_COMMIT) { cgit_commit_link(info->subject, NULL, NULL, name, NULL, NULL, 0); html(""); - cgit_open_filter(ctx.repo->email_filter, info->author_email); + cgit_open_filter(ctx.repo->email_filter, info->author_email, "refs"); html_txt(info->author); cgit_close_filter(ctx.repo->email_filter); html(""); @@ -157,12 +157,12 @@ static int print_tag(struct refinfo *ref) html(""); if (info) { if (info->tagger) { - cgit_open_filter(ctx.repo->email_filter, info->tagger_email); + cgit_open_filter(ctx.repo->email_filter, info->tagger_email, "refs"); html_txt(info->tagger); cgit_close_filter(ctx.repo->email_filter); } } else if (ref->object->type == OBJ_COMMIT) { - cgit_open_filter(ctx.repo->email_filter, ref->commit->author_email); + cgit_open_filter(ctx.repo->email_filter, ref->commit->author_email, "refs"); html_txt(ref->commit->author); cgit_close_filter(ctx.repo->email_filter); } diff --git a/ui-tag.c b/ui-tag.c index adbdb90..c1d1738 100644 --- a/ui-tag.c +++ b/ui-tag.c @@ -77,7 +77,7 @@ void cgit_print_tag(char *revname) } if (info->tagger) { html("
tagged by"); - cgit_open_filter(ctx.repo->email_filter, info->tagger_email); + cgit_open_filter(ctx.repo->email_filter, info->tagger_email, "tag"); html_txt(info->tagger); if (info->tagger_email && !ctx.cfg.noplainemail) { html(" ");