Rozšíření: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 |
|
|
|
|
| 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
-
Hlavní stránka zobrazující seznam anket.
-
Stránka s anketou s popisným textem.
-
Administrátorský protokol pro SecurePoll.
-
Přihlášení voliče na SecurePoll.
Instalace
- Stáhněte soubor/y a vložte je do adresáře pojmenovaného
SecurePollve vaší složceextensions/.
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.
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é:
- Zapsat XML soubor
- Importovt jej pomocí příkazu
import.phpz rozhraní příkazového řádku (CLI)
Ve složce test naleznete čtyři ukázkové soubory:
3way-test.xmlapproval-test.xmlradio-range.xmlschulze-test.xmlinfo
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$wgSecurePollUseLoggingnastaveno natrue, 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
$wgCanonicalServernakonfigurovaný 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.
| 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:
|
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.$wgSecurePollUseNamespaceis 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
- If you want the public logging feature (logging when election officials change election settings, logs to public pages), set
- 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
| Toto rozšíření se používá na jednom nebo více projektech Wikimedia. Pravděpodobně to znamená, že rozšíření je stabilní a funguje dostatečně dobře, aby jej mohly používat weby s tak vysokou návštěvností. Vyhledejte tento název rozšíření v konfiguračních souborech CommonSettings.php a InitialiseSettings.php Wikimedie, abyste viděli, kde je nainstalováno. Úplný seznam rozšíření nainstalovaných na konkrétní wiki lze vidět na stránce wiki Special:Version. |
| Toto rozšíření je zahrnuto v následujících wiki farmách/hostitelích a/nebo balíčcích: |
- Stable extensions/cs
- Special page extensions/cs
- CanonicalNamespaces extensions/cs
- CodeMirrorSpecialPage extensions/cs
- LoadExtensionSchemaUpdates extensions/cs
- SpecialPage initList extensions/cs
- TitleQuickPermissions extensions/cs
- UserLogout extensions/cs
- GPL licensed extensions/cs
- Extensions in Wikimedia version control/cs
- All extensions/cs
- Extensions used on Wikimedia/cs
- Extensions included in Miraheze/cs
- Poll extensions/cs
