Jump to content

Rozšíření:SecurePoll

From mediawiki.org
This page is a translated version of the page Extension:SecurePoll and the translation is 100% complete.
Příručka k rozšířením MediaWiki
SecurePoll
Stav rozšíření: stabilní
Implementace Speciální stránka
Popis Povolení k volbám, průzkumům a průzkumů
Autoři Tim Starlingdiskuse
Nejnovější verze 3.0.0 (průběžné aktualizace)
Zásady kompatibility Vydání snímků současně s MediaWiki. Hlavní vývojová větev není zpětně kompatibilní.
MediaWiki 1.25+
Změny v databázi Ano
  • $wgSecurePollShowErrorDetail
  • $wgSecurePollEditOtherWikis
  • $wgSecurePollUseLogging
  • $wgSecurePollKeepPrivateInfoDays
  • $wgSecurePollCreateRemoteScriptPath
  • $wgSecurePollUseNamespace
  • $wgSecurePollUseMediaWikiNamespace
  • $wgSecurePollMostActiveWikisThreshold
  • $wgSecurePollCreateWikiGroups
  • $wgSecurePollTempDir
  • $wgSecurePollCreateWikiGroupDir
  • $wgSecurePollExcludedWikis
  • securepoll-create-poll
  • securepoll-edit-poll
  • securepoll-view-voter-pii
Licence GNU General Public License 2.0 nebo novější
Stáhnout
Přeložte rozšíření SecurePoll, používá-li lokalizaci z translatewiki.net
Problémy Otevřené úkoly · Nahlásit chybu

Rozšíření SecurePoll je speciální rozšíření stránky pro volby, ankety a průzkumy. Používá se pro volby do správní rady Wikimedia Foundation a volby do arbitrážní komise a mimo jiné byl použit pro hlasování o přechodu na licenci Wikimedia.

Snímky obrazovky

Instalace

  • Stáhněte soubor/y a vložte je do adresáře pojmenovaného SecurePoll ve vaší složce extensions/.
    Vývojáři a přispěvatelé kódu by si místo toho měli nainstalovat rozšíření from Git pomocí:
    cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/SecurePoll
    
  • Na konec vašeho souboru LocalSettings.php přidejte následující kód:
    wfLoadExtension( 'SecurePoll' );
    
  • Spusťte aktualizační skript, který automaticky provede všechny nezbytné databázové změny, jaké rozšíření vyžaduje.
  • Yes Dokončeno – Přejděte na stránku Special:Version vaší wiki a zkontrolujte, zda bylo rozšíření úspěšně nainstalováno.

In addition, you will need to add some user groups and user rights to your LocalSettings.php file. Here is one way to do it, which gives a new group called electionadmin the power to do everything in SecurePoll (create polls, edit polls, see voter IP addresses):

$wgGroupPermissions['electionadmin']['securepoll-create-poll'] = true;
$wgGroupPermissions['electionadmin']['securepoll-edit-poll'] = true;
$wgGroupPermissions['electionadmin']['securepoll-view-voter-pii'] = true;

Once this group is created, a bureaucrat can add someone to the group using Special:UserRights. Then that person can visit Special:SecurePoll to view polls, create polls, edit polls, tally polls, etc.

Each poll's data is compartmentalized. You can have 100 electionadmins, but if you only add one electionadmin to a particular poll, only that one electionadmin will be able to edit that particular poll or see user IPs. If an electionadmin is removed from a poll, they will lose access to it.

securepoll-view-voter-pii is used for "scrutineering" a poll, which involves looking at a list of voter IPs, user agents, and X-Forwarded-For headers to look for cheating (secret duplicate votes by sockpuppets). Because this involves looking at voter IP addresses and other sensitive, personal, de-anonymizing data, it is a sensitive user right, so only trusted users should be assigned to the electionadmin group.

It is possible to split securepoll-view-voter-pii into a separate group. You can use a config such as the one below to create a group called scrutineer that contains the securepoll-view-voter-pii right, separating it from the electionadmin group:

$wgGroupPermissions['electionadmin']['securepoll-create-poll'] = true;
$wgGroupPermissions['electionadmin']['securepoll-edit-poll'] = true;

$wgGroupPermissions['scrutineer']['securepoll-create-poll'] = true;
$wgGroupPermissions['scrutineer']['securepoll-edit-poll'] = true;
$wgGroupPermissions['scrutineer']['securepoll-view-voter-pii'] = true;

A user also needs to be added to the poll (and hence have the securepoll-edit-poll right) in order to view PII - securepoll-view-voter-pii by itself has no effect.

Použití

Vytvoření nové ankety

Existují dva způsoby, jak vytvořit novou anketu: ručně vytvořit soubor XML a importovat ho, nebo použít rozhraní pro vytváření anket na adrese Special:SecurePoll.

Ručně

Pro ruční vytvoření ankety je nutné:

  1. Zapsat XML soubor
  2. Importovt jej pomocí příkazu import.php z rozhraní příkazového řádku (CLI)

Ve složce test naleznete čtyři ukázkové soubory:

  • 3way-test.xml
  • approval-test.xml
  • radio-range.xml
  • schulze-test.xml info

Chcete-li importovat anketu, spusťte ze složky cli následující příkaz:

extensions/SecurePoll/maintenance$ php importElectionConfiguration.php ../tests/phpunit/data/3way-test.xml

Chcete-li importovat anketu pomocí Dockeru, spusťte ze složky cli následující příkaz:

docker-compose exec mediawiki php extensions/SecurePoll/maintenance/importElectionConfiguration.php extensions/SecurePoll/tests/phpunit/data/3way-test.xml

Prostřednictvím webového rozhraní

Uživatel s právem securepoll-create-poll může vytvořit nový průzkum prostřednictvím odkazu v dolní části Special:SecurePoll.

Chcete-li vytvořit novou anketu, vyplňte povinná pole ve formuláři pro vytvoření. Zvláštní pozornost může být nutná u následujících polí:

  • Při přidávání administrátorů ankety jsou povoleni pouze členové skupiny electionadmin. Pokud je $wgSecurePollUseLogging nastaveno na true, bude se to zaznamenávat vždy, když bude do ankety přidán nebo z ní odebrán administrátor. Záznamy si můžete prohlédnout na Special:SecurePollLog.
  • Chcete-li vytvořit šifrovaný průzkum, vyberte rádio pro metodu šifrování. Pokud zvolíte GnuPG, vygenerujte (veřejný) šifrovací klíč a (soukromý) dešifrovací klíč. Zadejte šifrovací klíč do formuláře pro vytvoření a soukromý klíč uložte někde na bezpečném místě offline (budete ho potřebovat pro sčítání hlasů po skončení voleb). Podrobný příklad je k dispozici zde.

Nyní navštivte stránku Special:SecurePoll a uvidíte svou anketu. V horní části ankety je úvodní text o anketě. By default it will show [text], and this can be edited via the translation interface (see below).

Upravit existující anketu

Pro úpravu ankety musíte být administrátorem dané ankety. Z účtu Special:SecurePoll klikněte na odkaz Upravit u účtu, který chcete upravit.

Před zahájením voleb lze upravit cokoli, co se voleb týká. Po zahájení voleb již nelze některá pole upravovat.

Upravit, kdo může hlasovat v anketě

Chcete-li upravit, kdo může v anketě hlasovat, musíte být administrátorem dané ankety. Ze Special:SecurePoll klikněte na odkaz pro anketu na Oprávnění voliči.

Překlad ankety

Pro překlad ankety musíte být administrátorem dané ankety. Od Special:SecurePoll klikněte na odkaz Překlad u ankety, kterou chcete přeložit.

Zobrazení seznamu voličů

Seznam voličů si může prohlédnout kdokoli, pokud nebyly při vytváření ankety vypnuty funkce transparentnosti.

Administrátoři konkrétní ankety si mohou prohlédnout seznam voličů spolu se soukromými informacemi, které mohou pomoci identifikovat duplicitní voliče (např. IP adresy, informace o uživatelském agentu, sdílené soubory cookie). Pokud je $wgSecurePollUseLogging nastaveno na true, bude se to zaznamenávat vždy, když si administrátor zobrazí soukromá data. Záznamy si můžete prohlédnout na Special:SecurePollLog.

Administrátoři mohou smazat jakékoli hlasy, které považují za duplicitní.

Sečtení ankety

Abyste mohli spočítat hlasy v anketě, musíte být administrátorem dané ankety. Ze Special:SecurePoll klikněte na odkaz Tallies u ankety, kterou chcete spočítat.

Pokud byl průzkum již dříve sečten, výsledky se zobrazí na stránce. Pokud ne, nebo pokud chcete sčítání provést znovu, existuje formulář pro zahájení nového sčítání.

  • Pokud je anketa nešifrovaná, klikněte na tlačítko pro sčítání.
  • Pokud je anketa šifrovaná, může být nutné zadat další informace. Pokud jste například použili OpenSSL, zadejte (soukromý) dešifrovací klíč a klikněte na tlačítko pro sčítání. Pokud má šifrovaná anketa mnoho hlasů, může sečtení hlasů trvat dlouho. Možná budete muset výsledky zkontrolovat později.

Nyní navštivte stránku Special:SecurePoll a uvidíte svou anketu.

Sčítání (STV)

Více informací o w:Counting single transferable votes (STV) (počítání jednotlivých převoditelných hlasů) naleznete na Wikipedii.

Obecná implementace algoritmu (zdroj).

Kvóta je + .000000001. Kvóta je minimální počet hlasů potřebných k zajištění křesla.

1. Vypočítejte kvótu.
2. Přiřaďte hlasy kandidátům podle prvních preferencí.
3. Prohlašte za vítěze všechny kandidáty, kteří získali alespoň kvótu.
4. Převeďte přebytečné hlasy od vítězů k kandidátům.
5. Opakujte kroky 3 a 4, dokud nebudou zvoleni žádní noví kandidáti. (U některých systémů mohou být hlasy v tomto kroku zpočátku převedeny na předchozí vítěze nebo poražené. To může ovlivnit výsledek.)
Pokud mají všechna místa vítěze, proces je dokončen. Jinak:
6. Vylučte jednoho nebo více kandidátů, obvykle buď kandidáta s nejnižším počtem hlasů, nebo všechny kandidáty, jejichž součet hlasů je nižší než hlas zbývajícího kandidáta s nejnižším počtem hlasů.
7. Převeďte hlasy poražených na zbývající nadějné kandidáty.
8. Opakujte 3–7, dokud nebudou všechna místa plná.

Kvóta, kterou použijeme (krok 1), je Droopova kvóta (zdroj):

floor( no. votes / (no. seats + 1) ) + 1

Metoda pro převod hlasů od zvolených nebo vyloučených kandidátů bude Meekova metoda:

Sčítání (JobRunner)

  • Součty lze zpracovat pomocí naplánované úlohy Příručka:Fronta úloh . Ujistěte se, že pro tuto úlohu vytvoříte naplánovanou úlohu, nebo úlohu spusťte ručně.
  • Sčítání lze také zpracovat ručním spuštěním sčítacího skriptu:

Chcete-li provést sčítání, spusťte z kořenového adresáře MediaWiki následující příkaz:

extensions/SecurePoll/maintenance/TallyElection.php

Chcete-li spustit sčítání pomocí MediaWiki-Docker, spusťte následující příkaz z kořenového adresáře MediaWiki:

docker-compose exec mediawiki php extensions/SecurePoll/maintenance/TallyElection.php

Generování (STV) testovacích voleb

  • Testovací (STV) volby lze generovat z kořenového adresáře MediaWiki:
  • Chcete-li vygenerovat testovací volby, spusťte následující příkaz z kořenového adresáře MediaWiki:
extensions/SecurePoll/maintenance/GenerateTestElection.php
  • Testovací volby (STV) poskytují oporu pro sčítání hlasů

Přesměrování ankety

Přesměrovaná anketa je anketa, která se v seznamu anket zobrazí s číslem Special:SecurePoll, ale kliknutím na "hlasovat" a další odkazy bude volič přesměrován na jinou wiki. To je užitečné, pokud všechny své hlasy provádíte na centrální votewiki (v případě Wikimedie, https://vote.wikimedia.org).

Special:SecurePoll/create will show an additional drop-down list called "For wiki:"—allowing you to select "This wiki", "All wikis", or a different wiki in your wiki farm—if all of the following conditions are met:

  • Používáte wiki farmu (více wikin používajících stejný souborový systém, ale různé databáze).
  • Nevyloučili jste všechny ostatní wikiny pomocí parametru $wgSecurePollExcludedWikis.
  • Máte $wgCanonicalServer nakonfigurovaný tak, aby měl na každé wiki tečku (použijte různé subdomény).
  • Máte $wgSecurePollEditOtherWikis = true; na vaši aktuální wiki.

Pokud máte ve své wiki farmě wiki, která nemá nainstalovaný SecurePoll, nezapomeňte ji přidat do $wgSecurePollExcludedWikis, aby se nedostala do seznamu "Pro wiki:".

Vybrána rozbalovací položka "Pro wiki" Co dělá lokálně Co to dělá na jiných wikinách
Tato wiki Vytváří místní volby Nic
Všechny wikiny Vytváří místní volby Vytvoří "přesměrovací ankety" na každé další wiki ve wiki farmě
Výběr konkrétní jiné wiki, například es.wikipedia.org Vytváří místní volby Vytvoří "přesměrovací anketu" na vybrané wiki

Testing note: $wgCanonicalServer must contain domains with subdomains. So for example, http://localhost will not get the dropdown list to show up, but http://en.localhost will.

$wgConf->settings = [
   'wgCanonicalServer' => [
      'my_database' => 'http://en.localhost:8080',
      'secondwiki' => 'http://es.localhost:8080'
   ],

In the database, fields related to redirect polls include the following securepoll_properties.pr_keys: jump-id, jump-url, main-wiki, and mobile-jump-url.

Pro vývojáře

Tabulka SQL

Note that configuring a poll to use encryption encrypts the securepoll_votes.vote_record field.

Most Wikimedia installations of SecurePoll only have a subset of these tables because they are configured to only host redirect polls that redirect to votewiki. They do not have any local polls. phab:T395928
Table Field prefix Description Contains sensitive data? Table needed for redirect polls?[1][2]
securepoll_cookie_match cm_ Used on the vote details page to display the securepoll-cookie-dup-list message ("Cookie duplicate users"). Yes No
securepoll_elections el_ List of elections, and some basic config data such as the name, creator, start date, end date, language, ballot type (e.g. approval), and tally type (e.g. plurality). Additional config data is pivoted and stored in securepoll_properties instead. No Yes
securepoll_entity en_ Maps "one to many" with the securepoll_msg table. The "many" is because a securepoll_msg can be in multiple languages. Possible options for securepoll_entity.en_type are election, question, and option. No Yes
securepoll_lists li_ Stores usernames manually added via the Voter Eligibility page. Users are added in the format userName@databaseName. There are 3 types of lists:
  • Eligibility list - The li_name value is [electionId]/list/need-list. These are folks who are allowed to vote if they meet the on-the-fly eligibility requirements such as X number of edits.
  • Overrride list - The li_name value is [electionId]/list/include-list. These are folks who are allowed to vote no matter what.
  • Exclude list - The li_name value is [electionId]/list/exclude-list. These are folks who are not allowed to vote no matter what.
No Yes
securepoll_log spl_ If $wgSecurePollUseLogging is set to true, stores the log entries here. Yes. Special:SecurePollLog is private. No
securepoll_msgs msg_ List of strings. For example, the poll name, the poll questions, and the poll answers. This is mapped to from other tables such as securepoll_options and securepoll_questions, and supports having the same entity in multiple languages (securepoll_msgs.msg_lang). No Yes
securepoll_options op_ List of poll options for each question. Doesn't store the option text here, but rather maps it to the table securepoll_msgs. No No
securepoll_properties pr_ Config data for each election. For example, who the election admins are, whether it's a redirect poll, whether to shuffle the options, whether to use encryption, list of tallies and their values (tally-result), etc.

Is also the config data for on-the-fly voter eligibility calculation. For example, voter minimum edit count and voter not-sitewide-blocked is stored here.

Partial. Rows with pr_key as gpg-encrypt-key, gpg-sign-key, openssl-encrypt-key, openssl-sign-key, tally-result, tally-result-time are private data. Yes
securepoll_questions qu_ List of poll questions. Doesn't store the question text here, but rather maps it to the table securepoll_msgs. No No
securepoll_strike st_ Which votes have been struck (crossed out, removed from the tally) by election admins. Includes a reason that they can type in. Partial. Everyone can see which votes have been struck. Only election admins can see strike reasons. No
securepoll_voters voter_ One row per voter per election. Voters are distinct and will not be duplicated in the same election. Contains data on the voter such as their user groups and whether they're blocked or not. Probably used to determine voter eligibility. voter_properties contains data such as wiki, blocked, sitewide blocked, central block count, central sitewide block count, edit count, bot, language, user groups, eligibility lists, and registration date. Partial. This is private for elections with transparency features disabled. No
securepoll_votes vote_ One row per vote per election. Contains data on the voter such as IP address and user agent, and contains the actual vote in the vote_record column. The "most active wiki" that the voter chose, if enabled for this poll, is stored in vote_voter_domain. vote_current=0 means that this is a duplicate vote and has been discarded; this is re-calculated for all of the user's previous votes each time they submit a new vote. Yes. Contains voter PII such as IP addresses and user agents. Contains the vote itself and its timestamp (the vote date is public unless the voter list is turned off, the vote time is private). No

Enabling local elections on a Wikimedia wiki

SecurePoll is installed on every wiki except loginwiki and wikitech. But additional configuration is needed to get it to host local elections (and not just redirect polls / global elections).

  • Phab ticket - Create a Phabricator ticket to start the process and centralize discussion. Tag it "Wikimedia-site-requests" and "MediaWiki-extensions-SecurePoll". Make the ticket a parent of T301180 Allow local wikis to set up elections.
  • Consensus - Get consensus to have local elections through a noticeboard discussion on your local wiki, and then link it in the phab ticket.
  • Tables - Have someone with the right production shell access (ops, deployment, restricted, analytics-privatedata-users) check that your wiki has the above tables in s1-s8 (not x1). If your wiki is missing any of these tables, ask someone with the right production shell access (ops, deployment) to create just the missing tables. After T403874, these will be created by running the maintenance script WikimediaMaintenance -> createExtensionTables.php. Until that ticket is resolved, will need to do something else. Maybe copy paste some of SecurePoll -> sql/mysql/tables-generated.sql into the MariaDB monitor?
  • Patch - Write and deploy a gerrit patch similar to this one
    • If you want the public logging feature (logging when election officials change election settings, logs to public pages), set $wgSecurePollUseMediaWikiNamespace. $wgSecurePollUseNamespace is also an option, but is discouraged, because it creates an entire namespace for a small number of pages.
    • If you want the private logging feature (logging when election officials view IPs, logs to a private page), set $wgSecurePollUseLogging
  • NameTableAccessException - If you are getting the error "MediaWiki\Storage\NameTableAccessException: No insert possible but primary DB didn't give us a record for 'SecurePoll' in 'content_models", this is from T399633. The one time fix is to have a deployer run INSERT INTO content_models (model_name) VALUES ('SecurePoll')

Only the following wikis are able to run local elections, until they follow the checklist above. The ability of a wiki to create local elections depends on it having a user group with the user right securepoll-create-poll. Feel free to add your wiki here once it's gone through the above process.

  • arbcom_zh
  • enwiki
  • fawiki
  • officewiki
  • testwiki
  • votewiki
  • zhwiki

Dokumentace

SecurePoll

Obecnou dokumentaci k SecurePoll naleznete na adrese wikitech:SecurePoll.

Vylepšení SecurePoll

Souhrn vylepšení SecurePoll naleznete na stránce Nástroje proti obtěžování/Vylepšení SecurePoll.

Pochopení výsledku STV

Dokumentaci k výsledkům STV naleznete na stránce Nástroje proti obtěžování/Vylepšení SecurePoll/Pochopení výsledků STV.

See also