From a287e741842f67d0a04c48276221d85f16079d55 Mon Sep 17 00:00:00 2001 From: Opal <847966@proton.me> Date: Sat, 15 Oct 2022 15:27:41 -0700 Subject: merging code between old emacsconf repo, to sachac's emacsconf repo --- wiki/tasks/docker.yml | 45 --- wiki/tasks/main.yml | 57 ---- wiki/templates/Scrubber.pm | 749 ----------------------------------------- wiki/templates/copyright.pm | 60 ---- wiki/templates/emacsconf.setup | 440 ------------------------ wiki/templates/htmlscrubber.pm | 132 -------- wiki/templates/license.pm | 59 ---- 7 files changed, 1542 deletions(-) delete mode 100644 wiki/tasks/docker.yml delete mode 100644 wiki/tasks/main.yml delete mode 100644 wiki/templates/Scrubber.pm delete mode 100644 wiki/templates/copyright.pm delete mode 100644 wiki/templates/emacsconf.setup delete mode 100755 wiki/templates/htmlscrubber.pm delete mode 100644 wiki/templates/license.pm (limited to 'wiki') diff --git a/wiki/tasks/docker.yml b/wiki/tasks/docker.yml deleted file mode 100644 index a5d73e2..0000000 --- a/wiki/tasks/docker.yml +++ /dev/null @@ -1,45 +0,0 @@ -- name: Set up docker stuff if on docker - apt: - pkg: - - lighttpd - - supervisor -- name: Create the anon user - user: - name: anon -- name: Set up Ikiwiki setup - template: - src: emacsconf.setup - dest: "{{ ikiwiki_path }}/emacsconf.setup" - owner: www-data - group: www-data -- name: Set up the ikiwiki directories - file: - dest: /var/www/html - state: directory - owner: www-data - group: www-data -- name: Clone the bare git repo - git: - bare: true - repo: "{{ ikiwiki_git_source_mount }}" - dest: "{{ ikiwiki_bare_git_dir }}" - version: "{{ ikiwiki_git_branch }}" -- name: Change owner - file: - dest: "{{ ikiwiki_bare_git_dir }}" - recurse: true - owner: www-data - group: www-data -- name: Clone the working git repo - git: - repo: "{{ ikiwiki_bare_git_dir }}" - dest: "{{ ikiwiki_src_dir }}" - version: "{{ ikiwiki_git_branch }}" -- name: Copy supervisor config - template: - src: supervisord.conf - dest: /etc/supervisor/conf.d/ikiwiki.conf -- name: Start lighttpd - service: - name: lighttpd - state: started diff --git a/wiki/tasks/main.yml b/wiki/tasks/main.yml deleted file mode 100644 index 0fa2336..0000000 --- a/wiki/tasks/main.yml +++ /dev/null @@ -1,57 +0,0 @@ ---- -- name: Set up packages - ansible.builtin.apt: - update_cache: true - pkg: - - ikiwiki - - git - - openssh-server - - libimage-magick-perl - - libtext-csv-perl - - libxml-writer-perl - - imagemagick - - nginx - - wget - state: present -- name: Create ikiwiki group - group: - name: ikiwiki - state: present -- name: Create ikiwiki user - user: - name: ikiwiki - group: ikiwiki - state: present -- debug: - var: docker -- name: Set up or update repositories - ansible.builtin.git: - repo: git://git.emacsconf.org/emacsconf-wiki - dest: "{{ ikiwiki_src_dir }}" - when: not docker|d(false) -- name: Template the config - ansible.builtin.template: - src: emacsconf.setup - dest: "{{ ikiwiki_path }}/emacsconf.setup" - owner: ikiwiki -- name: Copy Ikiwiki plugins - template: - src: "{{ item }}" - dest: "{{ ikiwiki_plugin_path }}" - loop: - - copyright.pm - - htmlscrubber.pm - - license.pm -- include: docker.yml - when: docker is true -- name: Chown all the files to ikiwiki - file: - dest: "{{ ikiwiki_path }}" - owner: ikiwiki - group: ikiwiki - recurse: true -- name: Regenerate all the files - shell: ikiwiki --setup "{{ ikiwiki_path }}/emacsconf.setup" --rebuild --wrappers - register: output -- debug: - var: output diff --git a/wiki/templates/Scrubber.pm b/wiki/templates/Scrubber.pm deleted file mode 100644 index 2efaa10..0000000 --- a/wiki/templates/Scrubber.pm +++ /dev/null @@ -1,749 +0,0 @@ -package HTML::Scrubber; - -# ABSTRACT: Perl extension for scrubbing/sanitizing html - - -use 5.008; # enforce minimum perl version of 5.8 -use strict; -use warnings; -use HTML::Parser 3.47 (); -use HTML::Entities; -use Scalar::Util ('weaken'); - -our ( @_scrub, @_scrub_fh ); - -our $VERSION = '0.15'; # VERSION -our $AUTHORITY = 'cpan:NIGELM'; # AUTHORITY - -# my my my my, these here to prevent foolishness like -# http://perlmonks.org/index.pl?node_id=251127#Stealing+Lexicals -(@_scrub) = ( \&_scrub, "self, event, tagname, attr, attrseq, text" ); -(@_scrub_fh) = ( \&_scrub_fh, "self, event, tagname, attr, attrseq, text" ); - -sub new { - my $package = shift; - my $p = HTML::Parser->new( - api_version => 3, - default_h => \@_scrub, - marked_sections => 0, - strict_comment => 0, - unbroken_text => 1, - case_sensitive => 0, - boolean_attribute_value => undef, - empty_element_tags => 1, - ); - - my $self = { - _p => $p, - _rules => { '*' => 0, }, - _comment => 0, - _process => 0, - _r => "", - _optimize => 1, - _script => 0, - _style => 0, - }; - - $p->{"\0_s"} = bless $self, $package; - weaken( $p->{"\0_s"} ); - - return $self unless @_; - - my (%args) = @_; - - for my $f (qw[ default allow deny rules process comment ]) { - next unless exists $args{$f}; - if ( ref $args{$f} ) { - $self->$f( @{ $args{$f} } ); - } - else { - $self->$f( $args{$f} ); - } - } - - return $self; -} - - -sub comment { - return $_[0]->{_comment} - if @_ == 1; - $_[0]->{_comment} = $_[1]; - return; -} - - -sub process { - return $_[0]->{_process} - if @_ == 1; - $_[0]->{_process} = $_[1]; - return; -} - - -sub script { - return $_[0]->{_script} - if @_ == 1; - $_[0]->{_script} = $_[1]; - return; -} - - -sub style { - return $_[0]->{_style} - if @_ == 1; - $_[0]->{_style} = $_[1]; - return; -} - - -sub allow { - my $self = shift; - for my $k (@_) { - $self->{_rules}{ lc $k } = 1; - } - $self->{_optimize} = 1; # each time a rule changes, reoptimize when parse - - return; -} - - -sub deny { - my $self = shift; - - for my $k (@_) { - $self->{_rules}{ lc $k } = 0; - } - - $self->{_optimize} = 1; # each time a rule changes, reoptimize when parse - - return; -} - - -sub rules { - my $self = shift; - my (%rules) = @_; - for my $k ( keys %rules ) { - $self->{_rules}{ lc $k } = $rules{$k}; - } - - $self->{_optimize} = 1; # each time a rule changes, reoptimize when parse - - return; -} - - -sub default { - return $_[0]->{_rules}{'*'} - if @_ == 1; - - $_[0]->{_rules}{'*'} = $_[1] if defined $_[1]; - $_[0]->{_rules}{'_'} = $_[2] if defined $_[2] and ref $_[2]; - $_[0]->{_optimize} = 1; # each time a rule changes, reoptimize when parse - - return; -} - - -sub scrub_file { - if ( @_ > 2 ) { - return unless defined $_[0]->_out( $_[2] ); - } - else { - $_[0]->{_p}->handler( default => @_scrub ); - } - - $_[0]->_optimize(); #if $_[0]->{_optimize}; - - $_[0]->{_p}->parse_file( $_[1] ); - - return delete $_[0]->{_r} unless exists $_[0]->{_out}; - print { $_[0]->{_out} } $_[0]->{_r} if length $_[0]->{_r}; - delete $_[0]->{_out}; - return 1; -} - - -sub scrub { - if ( @_ > 2 ) { - return unless defined $_[0]->_out( $_[2] ); - } - else { - $_[0]->{_p}->handler( default => @_scrub ); - } - - $_[0]->_optimize(); # if $_[0]->{_optimize}; - - $_[0]->{_p}->parse( $_[1] ) if defined( $_[1] ); - $_[0]->{_p}->eof(); - - return delete $_[0]->{_r} unless exists $_[0]->{_out}; - delete $_[0]->{_out}; - return 1; -} - - -sub _out { - my ( $self, $o ) = @_; - - unless ( ref $o and ref \$o ne 'GLOB' ) { - open my $F, '>', $o or return; - binmode $F; - $self->{_out} = $F; - } - else { - $self->{_out} = $o; - } - - $self->{_p}->handler( default => @_scrub_fh ); - - return 1; -} - - -sub _validate { - my ( $s, $t, $r, $a, $as ) = @_; - return "<$t>" unless %$a; - - $r = $s->{_rules}->{$r}; - my %f; - - for my $k ( keys %$a ) { - my $check = exists $r->{$k} ? $r->{$k} : exists $r->{'*'} ? $r->{'*'} : next; - - if ( ref $check eq 'CODE' ) { - my @v = $check->( $s, $t, $k, $a->{$k}, $a, \%f ); - next unless @v; - $f{$k} = shift @v; - } - elsif ( ref $check || length($check) > 1 ) { - $f{$k} = $a->{$k} if $a->{$k} =~ m{$check}; - } - elsif ($check) { - $f{$k} = $a->{$k}; - } - } - - if (%f) { - my %seen; - return "<$t $r>" - if $r = join ' ', map { - defined $f{$_} - ? qq[$_="] . encode_entities( $f{$_} ) . q["] - : $_; # boolean attribute (TODO?) - } grep { exists $f{$_} and !$seen{$_}++; } @$as; - } - - return "<$t>"; -} - - -sub _scrub_str { - my ( $p, $e, $t, $a, $as, $text ) = @_; - - my $s = $p->{"\0_s"}; - my $outstr = ''; - - if ( $e eq 'start' ) { - if ( exists $s->{_rules}->{$t} ) # is there a specific rule - { - if ( ref $s->{_rules}->{$t} ) # is it complicated?(not simple;) - { - $outstr .= $s->_validate( $t, $t, $a, $as ); - } - elsif ( $s->{_rules}->{$t} ) # validate using default attribute rule - { - $outstr .= $s->_validate( $t, '_', $a, $as ); - } - } - elsif ( $s->{_rules}->{'*'} ) # default allow tags - { - $outstr .= $s->_validate( $t, '_', $a, $as ); - } - } - elsif ( $e eq 'end' ) { - my $place = 0; - if ( exists $s->{_rules}->{$t} ) { - $place = 1 if $s->{_rules}->{$t}; - } - elsif ( $s->{_rules}->{'*'} ) { - $place = 1; - } - if ($place) { - if ( length $text ) { - $outstr .= "$t>"; - } - else { - substr $s->{_r}, -1, 0, ' /'; - } - } - } - elsif ( $e eq 'comment' ) { - if ( $s->{_comment} ) { - - # only copy comments through if they are well formed... - $outstr .= $text if ( $text =~ m|^$|ms ); - } - } - elsif ( $e eq 'process' ) { - $outstr .= $text if $s->{_process}; - } - elsif ( $e eq 'text' or $e eq 'default' ) { - $text =~ s/</g; #https://rt.cpan.org/Ticket/Attachment/8716/10332/scrubber.patch - $text =~ s/>/>/g; - - $outstr .= $text; - } - elsif ( $e eq 'start_document' ) { - $outstr = ""; - } - - return $outstr; -} - - -sub _scrub_fh { - my $self = $_[0]->{"\0_s"}; - print { $self->{_out} } $self->{'_r'} if length $self->{_r}; - $self->{'_r'} = _scrub_str(@_); -} - - -sub _scrub { - - $_[0]->{"\0_s"}->{_r} .= _scrub_str(@_); -} - -sub _optimize { - my ($self) = @_; - - my (@ignore_elements) = grep { not $self->{"_$_"} } qw(script style); - $self->{_p}->ignore_elements(@ignore_elements); # if @ is empty, we reset ;) - - return unless $self->{_optimize}; - - #sub allow - # return unless $self->{_optimize}; # till I figure it out (huh) - - if ( $self->{_rules}{'*'} ) { # default allow - $self->{_p}->report_tags(); # so clear it - } - else { - - my (@reports) = - grep { # report only tags we want - $self->{_rules}{$_} - } keys %{ $self->{_rules} }; - - $self->{_p}->report_tags( # default deny, so optimize - @reports - ) if @reports; - } - - # sub deny - # return unless $self->{_optimize}; # till I figure it out (huh) - my (@ignores) = - grep { not $self->{_rules}{$_} } grep { $_ ne '*' } keys %{ $self->{_rules} }; - - $self->{_p}->ignore_tags( # always ignore stuff we don't want - @ignores - ) if @ignores; - - $self->{_optimize} = 0; - return; -} - -1; - -#print sprintf q[ '%-12s => %s,], "$_'", $h{$_} for sort keys %h;# perl! -#perl -ne"chomp;print $_;print qq'\t\t# test ', ++$a if /ok\(/;print $/" test.pl >test2.pl -#perl -ne"chomp;print $_;if( /ok\(/ ){s/\#test \d+$//;print qq'\t\t# test ', ++$a }print $/" test.pl >test2.pl -#perl -ne"chomp;if(/ok\(/){s/# test .*$//;print$_,qq'\t\t# test ',++$a}else{print$_}print$/" test.pl >test2.pl - -__END__ - -=pod - -=for stopwords html cpan callback homepage Perlbrew perltidy respository - -=head1 NAME - -HTML::Scrubber - Perl extension for scrubbing/sanitizing html - -=head1 VERSION - -version 0.15 - -=head1 SYNOPSIS - - use HTML::Scrubber; - - my $scrubber = HTML::Scrubber->new( allow => [ qw[ p b i u hr br ] ] ); - print $scrubber->scrub('
bold missing
'); - # output is:bold
- - # more complex input - my $html = q[ - - -