Unverified Commit 6526e85d authored by IKEDA Soji's avatar IKEDA Soji Committed by GitHub
Browse files

Merge branch 'sympa-6.2' into issue-893

parents d1bfa2fe d2a043dd
......@@ -7,12 +7,13 @@
- . ~/bashrc
- coverage-install
- coverage-setup
- cpanm --quiet --notest --installdeps . --with-develop
- cpanm --quiet --notest --installdeps --with-develop --with-feature=Data::Password --with-feature=ldap --with-feature=safe-unicode --with-feature=smime --with-feature=soap --with-feature=sqlite .
- cpanm --notest --quiet Unicode::CaseFold
- autoreconf -i
- ./configure
- cd src; make; cd ..
- make check-local TEST_FILES='xt/perltidy.t' || true
- make check-local TEST_FILES='t/compile_executables.t t/compile_modules.t t/Language.t t/compile_scenarios.t t/parse_templates.t t/pod-syntax.t'
- make check-local
- coverage-report
- make clean
......@@ -38,3 +39,5 @@
<<: *job
"5.28":
<<: *job
"5.30":
<<: *job
......@@ -28,7 +28,7 @@ before_install:
install:
- cpan-install --coverage
- cpanm --installdeps --notest --with-develop --with-feature=soap --with-feature=ldap .
- cpanm --installdeps --notest --with-develop --with-feature=Data::Password --with-feature=ldap --with-feature=safe-unicode --with-feature=smime --with-feature=soap --with-feature=sqlite .
- cpanm --notest --quiet Unicode::CaseFold
before_script:
......@@ -39,7 +39,7 @@ script:
- ./configure
- cd src; make; cd ..
- make check-local TEST_FILES='xt/perltidy.t' || true
- make check-local TEST_FILES='t/compile_executables.t t/compile_modules.t t/Language.t t/compile_scenarios.t t/parse_templates.t t/pod-syntax.t'
- make check-local
after_success:
- coverage-report
......
......@@ -27,26 +27,34 @@ SUBDIRS = src default doc po www
check_SCRIPTS = \
t/01_Conf.t \
t/02_Sympa_DatabaseManager.t \
t/Config_XML.t \
t/DataSource_LDAP2.t \
t/DatabaseManager.t \
t/Database_LDAP.t \
t/Language.t \
t/LockedFile.t \
t/Message_smime.t \
t/Message_urlize.t \
t/Regexps.t \
t/compile_modules.t \
t/compile_executables.t \
t/compile_scenarios.t \
t/Config_XML.t \
t/Database_LDAP.t \
t/DataSource_LDAP2.t \
t/parse_templates.t \
t/pod-syntax.t \
t/tools_data.t \
t/tools_file.t \
t/Scenario.t \
t/Tools_Data.t \
t/Tools_File.t \
t/Tools_Password.t \
t/Tools_SMIME.t \
t/Tools_Text.t \
t/tools_time.t
t/Tools_Time.t \
t/WWW_Tools.t \
t/compile_executables.t \
t/compile_modules.t \
t/compile_scenarios.t \
t/parse_templates.t \
t/pod-syntax.t
check_DATA = \
src/lib/Sympa/Test/MockLDAP.pm \
t/data/list_data/test/config \
t/data/sympa.conf \
t/data/sympa.sqlite \
t/data/etc/auth.conf \
t/locale/cs/LC_MESSAGES/sympa.mo \
t/locale/cs/LC_MESSAGES/web_help.mo \
t/locale/zh_TW/LC_MESSAGES/sympa.mo \
......@@ -57,10 +65,17 @@ check_DATA = \
t/pki/key/ca.pem \
t/pki/key/rousse_nopassword.pem \
t/pki/key/rousse_password.pem \
t/samples/urlize-deep-nested-mixed.eml \
t/samples/urlize-encoding.eml \
t/samples/urlize-nested-alternative-and-related.eml \
t/samples/urlize-nested-alternative.eml \
t/samples/urlize-nested-mixed.eml \
t/samples/urlize-nested-mutiple-attachments.eml \
t/samples/urlize-simple-mutiple-attachments.eml \
t/samples/urlize-simple.eml \
t/samples/signed.eml \
t/samples/unsigned.eml \
t/stub/Sympa/Constants.pm \
t/data/sympa.conf \
t/data/sympa.sqlite \
t/data/etc/auth.conf \
xt/perlcriticrc
noinst_SCRIPTS = \
xt/critic.t \
......
# Change Log
## [6.2.54](https://github.com/sympa-community/sympa/tree/6.2.54) (2020-02-24)
[Full Changelog](https://github.com/sympa-community/sympa/compare/6.2.52...6.2.54)
**Changes** (since 6.2.52) **:**
- Format of `family_signoff` link has been changed [\#854](https://github.com/sympa-community/sympa/pull/854). See [the documentation](https://sympa-community.github.io/manual/customize/basics-families.html#family-unsubscription) for details.
**Implemented enhancements:**
- Prevent welcome emails on import with `--quiet`. [\#851](https://github.com/sympa-community/sympa/pull/851) ([racke](https://github.com/racke))
**Fixed bugs:**
- \[SA 2020-001\] Security flaws in CSRF prevension [\#886](https://github.com/sympa-community/sympa/issues/886)
- Death of the wwsympa process bug [\#876](https://github.com/sympa-community/sympa/issues/876)
- Spurious errors for PGP/MIME multipart/signed messages [\#867](https://github.com/sympa-community/sympa/issues/867)
- WWSympa: review: Unable to sort by "Sources" column in subscriber list [\#866](https://github.com/sympa-community/sympa/issues/866)
- Bugs in scenario processing [\#849](https://github.com/sympa-community/sympa/issues/849) [\#846](https://github.com/sympa-community/sympa/issues/846) [\#845](https://github.com/sympa-community/sympa/issues/845) [\#844](https://github.com/sympa-community/sympa/issues/844) [\#841](https://github.com/sympa-community/sympa/issues/841)
- Data source: File: gecos was ignored [\#873](https://github.com/sympa-community/sympa/pull/873) ([ikedas](https://github.com/ikedas))
- Urlize mode bug fixes [\#840](https://github.com/sympa-community/sympa/pull/840) ([dverdin](https://github.com/dverdin)) [\#871](https://github.com/sympa-community/sympa/pull/871) ([ikedas](https://github.com/ikedas))
**Merged pull requests:**
- Update test suite [\#874](https://github.com/sympa-community/sympa/pull/874) ([ikedas](https://github.com/ikedas))
- Deprecate one-time ticket (work in progress) [\#853](https://github.com/sympa-community/sympa/pull/853) [\#854](https://github.com/sympa-community/sympa/pull/854) ([ikedas](https://github.com/ikedas))
- Deprecate `filesystem_encoding` parameter [\#829](https://github.com/sympa-community/sympa/pull/829) [\#838](https://github.com/sympa-community/sympa/pull/838) ([ikedas](https://github.com/ikedas))
## [6.2.52](https://github.com/sympa-community/sympa/tree/6.2.52) (2019-12-27)
[Full Changelog](https://github.com/sympa-community/sympa/compare/6.2.50...6.2.52)
......
......@@ -25,7 +25,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
AC_PREREQ(2.60)
AC_INIT(sympa, 6.2.52, sympa-developpers@listes.renater.fr)
AC_INIT(sympa, 6.2.54, sympa-developpers@listes.renater.fr)
AM_INIT_AUTOMAKE([foreign -Wall -Werror 1.9 tar-pax])
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AM_PO_SUBDIRS
......
......@@ -179,9 +179,11 @@ recommends 'Net::SMTP';
# Normalizes file names represented by Unicode
# Note: Perl 5.8.1 bundles version 0.23.
# Note: Perl 5.10.1 bundles this version (per Unicode 5.1.0).
# Note: Perl 5.10.1 bundles 1.03 (per Unicode 5.1.0).
recommends 'Unicode::Normalize', '>= 1.03';
recommends 'Unicode::UTF8', '>= 0.58';
### Features
##
......@@ -296,10 +298,11 @@ feature 'soap', 'Required if you want to run the Sympa SOAP server that provides
requires 'SOAP::Lite', '>= 0.712';
};
feature 'Unicode::Normalize', 'Normalizes file names represented by Unicode.' => sub {
feature 'safe-unicode', 'Sanitises inputs with Unicode text.' => sub {
# Note: Perl 5.8.1 bundles version 0.23.
# Note: Perl 5.10.1 bundles this version (per Unicode 5.1.0).
# Note: Perl 5.10.1 bundles 1.03 (per Unicode 5.1.0).
requires 'Unicode::Normalize', '>= 1.03';
requires 'Unicode::UTF8', '>= 0.58';
};
on 'test' => sub {
......
......@@ -86,6 +86,8 @@ nobase_default_DATA = \
scenari/d_read.private \
scenari/d_read.private-https \
scenari/d_read.public \
scenari/family_signoff.auth \
scenari/family_signoff.closed \
scenari/global_remind.listmaster \
scenari/info.open \
scenari/info.private \
......@@ -216,8 +218,6 @@ nobase_default_DATA = \
web_tt2/editsubscriber.tt2 \
web_tt2/edit_template.tt2 \
web_tt2/error.tt2 \
web_tt2/family_signoff.tt2 \
web_tt2/family_signoff_request.tt2 \
web_tt2/footer.tt2 \
web_tt2/get_closed_lists.tt2 \
web_tt2/get_inactive_lists.tt2 \
......
......@@ -10,7 +10,7 @@ Subject: [%"List \"%1@%2\" creation request from %3"|loc(list.name,domain,email)
[% 'info' | url_abs([list.name]) %]
[%|loc%]To activate/delete this mailing list:[%END%]
[% 'ticket' | url_abs([one_time_ticket]) %]
[% 'get_pending_lists' | url_abs %]
[%- ELSIF type == 'list_created' -%]
[% PROCESS 'list_created.tt2' -%]
......@@ -30,7 +30,7 @@ Subject: [%"List \"%1\" renaming"|loc(list.name)|qencode%]
[% END %]
[%|loc%]To activate/delete this mailing list:[%END%]
[% 'ticket' | url_abs([one_time_ticket]) %]
[% 'get_pending_lists' | url_abs %]
[% ELSIF type == 'no_db' -%]
Subject: [%"No database"|loc|qencode%]
......
......@@ -32,7 +32,7 @@ Subject: [%"FYI: %1 List \"%2\" from %3 %4"|loc(type,list.name,who,gecos)|qencod
[%|loc(who,gecos,list.name)%]WARNING: %1 %2 failed to unsubscribe from %3 because their address was not found in the list.
You may help this person looking for similar email in subscriber list using the following link :[%END%]
[% 'ticket' | url_abs([one_time_ticket]) %]
[% 'search' | url_abs([list.name,who]) %]
[% ELSIF type == 'erase_customizing' -%]
Subject: [%"List \"%1\" customizations have been removed"|loc(list.name)|qencode%]
......
......@@ -15,7 +15,7 @@ Content-Disposition: inline
[% IF method == 'md5' -%]
[%|loc(mod_spool_size)%]%1 messages are awaiting moderation.[%END%]
[%|loc%]To view the messages, please click on the following URL:[%END%] <[% 'ticket' | url_abs([one_time_ticket]) %]>
[%|loc%]To view the messages, please click on the following URL:[%END%] <[% 'modindex' | url_abs([list.name]) %]>
[% IF request_topic -%][%|loc()%]This mailing list is configured to require topics; that's probably why this message went through the moderation process.[%END%]
......
......@@ -242,10 +242,10 @@
[%~ ELSIF report_entry == 'unable_to_load_create_list_templates' ~%]
[%|loc%]Unable to load create_list templates.[%END%]
[%~ ELSIF report_entry == 'sync_include_failed' ~%]
[%~ ELSIF report_entry == 'sync_include_failed' # No longer used ~%]
[%|loc%]Failed to include members[%END%]
[%~ ELSIF report_entry == 'sync_include_admin_failed' ~%]
[%~ ELSIF report_entry == 'sync_include_admin_failed' # No longer used ~%]
[%|loc%]Failed to include list admins[%END%]
[%~ ELSIF report_entry == 'no_owner_defined' ~%]
......@@ -408,12 +408,27 @@
[%~ ELSIF report_entry == 'no_msg_document' ~%]
[%|loc(report_param.list)%]No message and no document to moderate for list %1[%END%]
[%~ ELSIF report_entry == 'subscribers_updated' ~%]
[%|loc%]The list of list members have been built/updated.[%END%]
[%~ ELSIF report_entry == 'member_updated' # No longer used ~%]
[%|loc%]The list of list subscribers have been built/updated.[%END%]
[%~ ELSIF report_entry == 'subscribers_updated_soon' ~%]
[%~ ELSIF report_entry == 'owner_updated' # No longer used ~%]
[%|loc%]The list of list owners have been built/updated.[%END%]
[%~ ELSIF report_entry == 'editor_updated' # No longer used ~%]
[%|loc%]The list of list moderators have been built/updated.[%END%]
[%~ ELSIF report_entry == 'subscribers_updated_soon' # No longer used ~%]
[%|loc%]The list of list members will be built/updated soon (a few minutes).[%END%]
[%~ ELSIF report_entry == 'member_updated_soon' ~%]
[%|loc%]The list of list subscribers will be built/updated soon (in an hour). If you wish immediate update, click "Synchronize members with data sources".[%END%]
[%~ ELSIF report_entry == 'owner_updated_soon' ~%]
[%|loc%]The list of list owners will be built/updated soon (in an hour). If you wish immediate update, click "Synchronize owners with data sources".[%END%]
[%~ ELSIF report_entry == 'editor_updated_soon' ~%]
[%|loc%]The list of moderators will be built/updated soon (in an hour). If you wish immediate update, click "Synchronize moderators with data sources".[%END%]
[%~ ELSIF report_entry == 'subscribers_noticed_deleted_topics' ~%]
[%|loc%]Concerned subscribers have been notified about deleted topics.[%END%]
......
[%# request_auth.tt2 ~%]
To: [% to %]
[% IF conf.wwsympa_url && type == 'signoff' -%]
[% IF conf.wwsympa_url && type == 'family_signoff' -%]
Subject: [%"%1 / unsubscribing from family %2"|loc(conf.title,family.name)|qencode%]
[%- ELSIF conf.wwsympa_url && type == 'signoff' -%]
Subject: [%"%1 / unsubscribing from %2"|loc(conf.title,list.name)|qencode%]
[%- ELSIF conf.wwsympa_url && type == 'subscribe' -%]
Subject: [%"%1 / subscribing to %2"|loc(conf.title,list.name)|qencode%]
......@@ -8,7 +10,10 @@ Subject: [%"%1 / subscribing to %2"|loc(conf.title,list.name)|qencode%]
Subject: [%"AUTH ${keyauth} ${cmd}"|qencode%]
[%- END %]
[% IF type == 'signoff' -%]
[% IF type == 'family_signoff' -%]
[%|loc(family.name)-%]You requested that your e-mail address be removed from family '%1'.[%- END -%]
[%- ELSIF type == 'signoff' -%]
[%|loc(list.name)-%]You requested that your e-mail address be removed from list '%1'.[%- END -%]
[%- ELSIF type == 'subscribe' -%]
......
......@@ -36,17 +36,6 @@ Subject: [%"Management of list %1"|loc(list.name)|qencode%]
[%|loc%]Owner and moderator guide:[%END%] [% 'help' | url_abs(['admin.html']) %]
[% END -%]
[% ELSIF type == 'ticket_to_family_signoff' -%]
Subject: [%"Unsubscribing from family %1"|loc(family)|qencode%]
[% IF context == 'family_signoff'%]
[%|loc(family,ip)%]Somebody (probably you) requested to unsubscribe you from family %1. This query was issued from the IP address %2.
To confirm and be removed from all the lists of this family, please click the link below: [%END%]
[% ELSE %]
[%|loc(family)%]You have requested to be removed from family %1. To confirm and be removed from all the lists of this family, please click the link below: [%END%]
[% END %]
[% 'ticket' | url_abs([one_time_ticket]) %]
[% ELSIF type == 'hundred_percent_error' -%]
Subject: [%"No valid recipient in list %1"|loc(list.name)|qencode%]
......
# family_signoff.auth
title.gettext need authentication
!equal([sender],[email]) smtp,dkim,md5,smime -> request_auth([email])
true() smtp,dkim -> request_auth([email])
true() md5,smime -> do_it
# family_signoff.closed
title.gettext impossible
true() smtp,dkim,md5,smime -> reject(reason='unsub_closed')
......@@ -56,6 +56,8 @@
[%|loc%]Add subscribers[%END%]
[%~ ELSIF heldaction == 'del' ~%]
[%|loc%]Delete selected email addresses[%END%]
[%~ ELSIF heldaction == 'family_signoff' ~%]
[%|loc%]Global unsubscription[%END%]
[%~ ELSIF heldaction == 'move_user' ~%]
[%|loc%]Changing user's email[%END%]
[%~ ELSIF heldaction == 'remind' || heldaction == 'global_remind' ~%]
......@@ -217,6 +219,16 @@
[%|loc(shared_doc.name)%]Do you really want to delete %1?[%END%]
</strong>
</p>
[%~ ELSIF confirm_action == 'family_signoff' ~%]
<h2>
<i class="fa fa-check-circle"></i>
[%|loc%]Global unsubscription[%END%]
</h2>
<p>
<strong>
[%|loc(family)%]Do you really want to unsubscribe from the lists in family %1?[%END%]
</strong>
</p>
[%~ ELSIF confirm_action == 'move_list' ~%]
<h2>
<i class="fa fa-check-circle"></i>
......@@ -387,6 +399,9 @@
<input type="hidden" name="heldaction" value="[% heldaction %]" />
<input type="hidden" name="listname" value="[% listname %]" />
<input type="hidden" name="email" value="[% email %]" />
[% IF heldaction == 'family_signoff' ~%]
<input type="hidden" name="family" value="[% family %]" />
[%~ END %]
[%~ ELSIF confirm_action == 'auth_add' ~%]
[% FOREACH i = id ~%]
<input type="hidden" name="id" value="[% i %]" />
......@@ -453,6 +468,8 @@
<input type="hidden" name="d_admin" value="[% d_admin %]" />
[%~ ELSIF confirm_action == 'd_delete' ~%]
<input type="hidden" name="path" value="[% shared_doc.paths.join("/") %]" />
[%~ ELSIF confirm_action == 'family_signoff' ~%]
<input type="hidden" name="email" value="[% email %]" />
[%~ ELSIF confirm_action == 'move_user' ~%]
<input type="hidden" name="current_email" value="[% current_email %]" />
<input type="hidden" name="email" value="[% email %]" />
......@@ -507,6 +524,7 @@
# Confirmation common hidden fields
#%]
<input type="hidden" name="action" value="[% confirm_action %]" />
<input type="hidden" name="family" value="[% family %]" />
<input type="hidden" name="list" value="[% list %]" />
<input type="hidden" name="previous_action" value="[% previous_action %]" />
......
<!-- family_signoff.tt2 -->
<h3>[%|loc%]Global unsubscription[% END %]</h3>
<p>
[%|loc(signing_off_email,family)%]You successfully unsubscribed the address %1 from family %2.[% END %]
</p>
<!-- end family_signoff.tt2 -->
<!-- family_signoff_request.tt2 -->
<h3>[%|loc%]Global unsubscription request[% END %]</h3>
<p>
[%|loc(signing_off_email,family)%]You clicked a link to unsubscribe the address %1 from family %2.[% END %]
</p>
<p>
[%|loc(family)%]A confirmation request was just sent to this address. By clicking the link it contains, you will be completely unsubscribed from all the lists from family %1[% END %]
</p>
<!-- end family_signoff_request.tt2 -->
<!-- family_signoff_request2.tt2 -->
<h3>[%|loc%]Global unsubscription[% END %]</h3>
<p>
[%|loc(signing_off_email,family)%]You successfully unsubscribed the address %1 from family %2.[% END %]
</p>
<!-- end family_signoff_request2.tt2 -->
......@@ -55,12 +55,13 @@
</a>
<br />
[% IF may_sync %]
[% IF may_include.member %]
<br />
<form name="synchronize_list_members" action="[% path_cgi %]" method="post">
<input class="MainMenuLinks heavyWork" type="submit" name="action_sync_include"
value="[%|loc%]Synchronize members with data sources[%END%]" />
<input type="hidden" name="list" value="[% list %]"/>
<input type="hidden" name="role" value="member"/>
</form>
[% END %]
<hr>
......@@ -456,6 +457,21 @@
</fieldset>
</form>
[% IF may_include.$role ~%]
<br />
<form name="sync_include" action="[% path_cgi %]" method="post">
<input class="MainMenuLinks heavyWork" type="submit"
name="action_sync_include"
value="[% IF role == 'owner' ~%]
[%|loc%]Synchronize owners with data sources[%END%]
[%~ ELSE ~%]
[%|loc%]Synchronize moderators with data sources[%END%]
[%~ END %]" />
<input type="hidden" name="list" value="[% list %]"/>
<input type="hidden" name="role" value="[% role %]"/>
</form>
[%~ END %]
[%# AJAX modal dialog ~%]
<div id="edit" class="reveal medium" data-reveal role="dialog"
aria-labelledby="[%|loc%]View user[%END%]" aria-hidden="true">
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment