5 次代碼提交 850f292260 ... 570a6b1f07

作者 SHA1 備註 提交日期
  Alex Schroeder 570a6b1f07 stuff/server: use ./wiki.pl instead of wiki.pl 4 年之前
  Alex Schroeder 4211d6aa03 definition-lists: new 5 年之前
  Alex Schroeder 5941fcd7e6 recaptcha: fix tests 5 年之前
  Alex Schroeder f3df2eb289 Merge pull request #21 from fancypantalons/master 5 年之前
  Brett Kosinski 8b975cd5e5 Switch to reCAPTCH v2 API. 5 年之前
共有 5 個文件被更改,包括 88 次插入9 次删除
  1. 37 0
      modules/definition-lists.pl
  2. 6 5
      modules/recaptcha.pl
  3. 3 3
      stuff/server.pl
  4. 41 0
      t/definition-lists.t
  5. 1 1
      t/recaptcha.t

+ 37 - 0
modules/definition-lists.pl

@@ -0,0 +1,37 @@
+#! /usr/bin/perl
+# Copyright (C) 2019  Alex Schroeder <alex@gnu.org>
+
+# This program is free software: you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program. If not, see <http://www.gnu.org/licenses/>.
+
+use strict;
+use v5.10;
+
+AddModuleDescription('definition-lists.pl', 'Definition Lists Extension');
+
+our ($q, $bol, @MyRules, @HtmlStack, $Fragment);
+
+push(@MyRules, \&DefinitionListsRule);
+
+# term
+# : definition
+
+sub DefinitionListsRule {
+  if ($bol and /\G(?:\s*\n)*(\S.*)\n[ \t]*:[ \t]*/cg) {
+    return OpenHtmlEnvironment('dl', 1) . "<dt>$1</dt>" . AddHtmlEnvironment('dd');
+  } elsif (InElement('dd') and /\G(?:\s*\n)+(\S.*)\n[ \t]*:[ \t]*/cg) {
+    return OpenHtmlEnvironment('dl', 1) . "<dt>$1</dt>" . AddHtmlEnvironment('dd');
+  } elsif (InElement('dd') and /\G(\s*\n)+[ \t]*:[ \t]*/cg) {
+    return OpenHtmlEnvironment('dl', 1) . AddHtmlEnvironment('dd');
+  }
+  return;
+}

+ 6 - 5
modules/recaptcha.pl

@@ -171,7 +171,7 @@ sub ReCaptchaGetQuestion {
 # if (defined $ReCaptchaTabIndex) { $recaptcha_options{tabindex} = $ReCaptchaTabIndex; }
 
   eval "use Captcha::reCAPTCHA";
-  my $captcha_html = Captcha::reCAPTCHA->new()->get_html(
+  my $captcha_html = Captcha::reCAPTCHA->new()->get_html_v2(
     $ReCaptchaPublicKey, undef, $ENV{'HTTPS'} eq 'on', undef);
   my $submit_html = $need_button ? $q->submit(-value=> T('Go!')) : '';
   my $options_html = '
@@ -239,11 +239,12 @@ sub NewReCaptchaDoPost {
 
 sub ReCaptchaCheckAnswer {
   eval "use Captcha::reCAPTCHA";
-  my $result = Captcha::reCAPTCHA->new()->check_answer(
+  my $answer = GetParam('g-recaptcha-response');
+  return 0 unless $answer;
+  my $result = Captcha::reCAPTCHA->new()->check_answer_v2(
     $ReCaptchaPrivateKey,
-    $q->remote_addr(),
-    GetParam('recaptcha_challenge_field'),
-    GetParam('recaptcha_response_field')
+    $answer,
+    $q->remote_addr()
   );
   return $result->{is_valid};
 }

+ 3 - 3
stuff/server.pl

@@ -44,10 +44,10 @@ $ENV{WikiDataDir} = $dir if $dir;
 die <<'EOT' unless -f $wiki;
 Usage: perl server.pl [WIKI [PORT [DIR]]]
 
-Example: perl server.pl wiki.pl 8080 ~/src/oddmuse/test-data
+Example: perl server.pl ./wiki.pl 8080 ~/src/oddmuse/test-data
 
 You may provide the Oddmuse wiki script on the command line. If you do not
-provide it, WIKI will default to 'wiki.pl'.
+provide it, WIKI will default to './wiki.pl'.
 
 You may provide a port number on the command line. If you do not provide it,
 PORT will default to 8080.
@@ -67,7 +67,7 @@ echo <<EOF > "$WikiDataDir/config"
 $AdminPass = 'foo';
 $ScriptName = 'http://localhost/';
 EOF
-perl stuff/server.pl wiki.pl &
+perl stuff/server.pl ./wiki.pl &
 SERVER=$!
 sleep 1
 w3m http://localhost:8080/

+ 41 - 0
t/definition-lists.t

@@ -0,0 +1,41 @@
+# Copyright (C) 2019  Alex Schroeder <alex@gnu.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+require './t/test.pl';
+package OddMuse;
+use Test::More;
+
+add_module('definition-lists.pl');
+
+run_tests(split('\n',<<'EOT'));
+this is a test\n\na test!
+this is a test<p>a test!</p>
+test\n: some definition
+<dl><dt>test</dt><dd>some definition</dd></dl>
+test\n: some definition\nand some text
+<dl><dt>test</dt><dd>some definition and some text</dd></dl>
+test\n: some definition\n\nbut this is not
+<dl><dt>test</dt><dd>some definition</dd></dl><p>but this is not</p>
+an introduction\n\ntest\n: some definition
+an introduction<dl><dt>test</dt><dd>some definition</dd></dl>
+test\n: some definition\nand this\n: is another definition
+<dl><dt>test</dt><dd>some definition</dd><dt>and this</dt><dd>is another definition</dd></dl>
+test\n: some definition\n: another definition
+<dl><dt>test</dt><dd>some definition</dd><dd>another definition</dd></dl>
+test\n: some definition\n\nand this\n: is another definition
+<dl><dt>test</dt><dd>some definition</dd><dt>and this</dt><dd>is another definition</dd></dl>
+EOT
+
+done_testing();

+ 1 - 1
t/recaptcha.t

@@ -1,4 +1,4 @@
-# Copyright (C) 2013–2015  Alex Schroeder <alex@gnu.org>
+# Copyright (C) 2013–2019  Alex Schroeder <alex@gnu.org>
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by