% $Id: t-prot.sl,v 1.20 2012/02/07 11:19:57 jochen Exp $
% Copyright (c) 2003-2005 Jochen Striepe <t-prot@tolot.escape.de>
%
% This file is provided as an example implemention for articles to be
% filtered through t-prot before displayed. They are still filtered if
% you reply to such a message so you will have to deactivate this if
% you want to include quotes of the original article.
%
% Activate this macro by adding
%   interpret t-prot.sl
% to your ~/.slrnrc.
%
% If you are not happy with the suggested t-prot default parameters,
% put something like
%   variable t_prot_params = "-c -emtS";
%   variable t_prot_tmpdir = "$HOME/.tmpdir";
%   variable t_prot_qp     = "";
% into ~/.slrn/t-prot-cfg and add
%   interpret .slrn/t-prot-cfg
% to your ~/.slrnrc (after 'interpret t-prot.sl'). If "mimedecode" is
% installed on your system you might want to use
%   variable t_prot_qp     = "mimedecode";
% You can get mimedecode at
%   http://packages.debian.org/stable/mail/mimedecode.html
%
% However, please keep in mind that the path of the temp directory should
% NOT be readable to other users -- otherwise it might reveal information on
% what you read, and probably even be a security hole. Please see t-prot's
% man page for details on command line parameters.
%
% If you want to toggle t-prot filtering on/off without leaving slrn,
% you may want to add something like
%   setkey article   register_t_prot "\e6"
%   setkey article unregister_t_prot "\e7"
% to your ~/.slrnrc -- press ESC-6 to activate t-prot filtering, and
% ESC-7 to disable it (this will take effect on the next article you
% read, see the package's TODO file).
%
% Requirements/Bugs: tr(1) and rm(1) are POSIX and should be available
% on any Unix-like system, mktemp(1) should be available on any recent
% OpenBSD or Debian Linux system -- you can get the sources there
% if your system happens to lack this program. This macro has been
% written for S-Lang v2.x (and will definitely fail with S-Lang v1.x).
% As always, bug reports, patches (preferrably in unified diff format),
% comments and suggestions are welcome.
%
% License: This file is part of the t-prot package and therefore
% available under the same conditions. See t-prot's man page for
% details.


% these should be reasonable defaults (they work fine for me, SCNR):
variable t_prot_params = "-aeklmtc -S --diff --bigq -L$HOME/.slrn/mlfooters -A$HOME/.slrn/adfooters";
variable t_prot_tmpdir = "$HOME/tmp/slrn"; % you better make sure it exists
variable t_prot_qp = "perl -i -p -e '$p=1 if /^Content-Transfer-Encoding: quoted-printable/i; if ($p==1) { s/=([0-9a-f][0-9a-f])/chr(hex($1))/egi; s/=\n//eg; };'";

define t_prot () {
	variable art, f, fname, line, qp;
	art = "";

 	% Keep in mind that the path should NOT be readable to other users --
	% otherwise it might reveal information on what you read, and probably
	% even be a security hole:
	f = popen ("mktemp -q "+t_prot_tmpdir+"/t-prot.sl.XXXXXX | tr -d '\n'", "r");
	if (f == NULL) return;
	if (-1 == fgets (&fname, f)) return;
	pclose (f);


	if (t_prot_qp != "") { qp = t_prot_qp+"|"; } else { qp = ""; }

	f = popen (qp+"t-prot "+t_prot_params+" >"+fname, "w");
	if (f == NULL) {
		message ("Unable to filter article to "+fname);
		return;
	}
	() = fputs (article_as_string(), f);
	() = pclose (f);


	f = fopen (fname, "r");
	if (f == NULL) {
		message (fname+" could not be opened.");
		return;
	}
	while (-1 != fgets (&line, f)) {
		art = art + line;
	}
	fclose (f);

	if (0 != remove(fname)) message ("Unable to remove "+fname);

	replace_article (art);
}

define register_t_prot () {
	if (1 == register_hook("read_article_hook", "t_prot")) {
		message ("t-prot filtering activated");
	}
	else {
		message ("t-prot filtering NOT activated");
	}
}

define unregister_t_prot () {
	if (1 == unregister_hook("read_article_hook", "t_prot")) {
		message ("t-prot filtering deactivated");
	}
	else {
		message ("t-prot filtering NOT deactivated");
	}
}

% filtering is enabled by default:
register_hook("read_article_hook", "t_prot");
