mirror of
https://github.com/siv-org/siv.git
synced 2026-01-10 02:47:58 -05:00
Replace secureinternetvoting.org -> siv.org
This commit is contained in:
@@ -18,10 +18,10 @@ yarn dev
|
||||
|
||||
## Layout
|
||||
|
||||
- http://secureinternetvoting.org - Landing page
|
||||
- http://secureinternetvoting.org/admin - Create New Election
|
||||
- http://secureinternetvoting.org/protocol - Protocol Description
|
||||
- http://secureinternetvoting.org/faq - FAQ
|
||||
- http://siv.org - Landing page
|
||||
- http://siv.org/admin - Create New Election
|
||||
- http://siv.org/protocol - Protocol Description
|
||||
- http://siv.org/faq - FAQ
|
||||
|
||||
## Next steps
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ export const firebase = !Firebase.apps.length
|
||||
/** Init mailgun */
|
||||
export const mailgun = Mailgun({
|
||||
apiKey: MAILGUN_API_KEY as string,
|
||||
domain: MAILGUN_DOMAIN || 'secureinternetvoting.org',
|
||||
domain: MAILGUN_DOMAIN || 'siv.org',
|
||||
})
|
||||
|
||||
export const sendEmail = ({
|
||||
@@ -49,7 +49,7 @@ export const sendEmail = ({
|
||||
}) =>
|
||||
mailgun.messages().send({
|
||||
attachment: !attachment ? undefined : new mailgun.Attachment(attachment),
|
||||
from: `${from || 'SIV Admin'} <${fromEmail || 'election@secureinternetvoting.org'}>`,
|
||||
from: `${from || 'SIV Admin'} <${fromEmail || 'election@siv.org'}>`,
|
||||
html: `<body style="background-color: #f5f5f5; padding: 2em 0.5em;">
|
||||
<table align="center" style="text-align: left; max-width: 600px; background-color: white;">
|
||||
<tr>
|
||||
|
||||
@@ -45,7 +45,7 @@ Approve & skip email verification: ${req.headers.origin}/approve-admin?id=${doc_
|
||||
|
||||
await Promise.all([
|
||||
sendEmail({
|
||||
recipient: 'applied-admin@secureinternetvoting.org',
|
||||
recipient: 'applied-admin@siv.org',
|
||||
subject: `SIV Admin Application: ${email}`,
|
||||
text: message,
|
||||
}),
|
||||
|
||||
@@ -35,13 +35,13 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
// Send them an email with their login instructions
|
||||
sendEmail({
|
||||
from: 'David Ernst',
|
||||
fromEmail: 'david@secureinternetvoting.org',
|
||||
fromEmail: 'david@siv.org',
|
||||
recipient: data.email,
|
||||
subject: 'SIV Account Approved',
|
||||
text: `<h2 style="margin-bottom: 0;">SIV Account Approved</h2>
|
||||
Congratulations, you now have the ability to create Secure Internet Voting elections.
|
||||
Congratulations, you now have the ability to create SIV elections.
|
||||
|
||||
You can login anytime at <b><a href="https://login.secureinternetvoting.org">login.secureinternetvoting.org</a></b>`,
|
||||
You can login anytime at <b><a href="https://login.siv.org">login.siv.org</a></b>`,
|
||||
})
|
||||
|
||||
// If they still have the Waiting Page open, show that they've been approved
|
||||
|
||||
@@ -24,7 +24,7 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
|
||||
// Find one page of mailgun events for this election
|
||||
function getMgEvents(next?: string) {
|
||||
return mailgun.get(next || '/secureinternetvoting.org/events', {
|
||||
return mailgun.get(next || '/siv.org/events', {
|
||||
ascending: 'yes',
|
||||
begin: new Date(created_at._seconds * 1000).toUTCString(),
|
||||
limit: 300,
|
||||
@@ -42,7 +42,7 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
mgEventsList.items,
|
||||
async (item: { event: string; recipient: string }) => {
|
||||
// Skip replies to us
|
||||
if (item.recipient === 'election@secureinternetvoting.org') return
|
||||
if (item.recipient === 'election@siv.org') return
|
||||
const trusteeDoc = electionDoc.collection('trustees').doc(item.recipient)
|
||||
// Confirm trusteeDoc exists
|
||||
if (!(await trusteeDoc.get()).exists) {
|
||||
|
||||
@@ -24,7 +24,7 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
|
||||
// Find one page of mailgun events for this election
|
||||
function getMgEvents(next?: string) {
|
||||
return mailgun.get(next || '/secureinternetvoting.org/events', {
|
||||
return mailgun.get(next || '/siv.org/events', {
|
||||
ascending: 'yes',
|
||||
begin: new Date(created_at._seconds * 1000).toUTCString(),
|
||||
limit: 300,
|
||||
@@ -42,7 +42,7 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
mgEventsList.items,
|
||||
async (item: { event: string; recipient: string }) => {
|
||||
// Skip replies to us
|
||||
if (item.recipient === 'election@secureinternetvoting.org') return
|
||||
if (item.recipient === 'election@siv.org') return
|
||||
const voterDoc = electionDoc.collection('voters').doc(item.recipient)
|
||||
// Confirm voterDoc exists
|
||||
if (!(await voterDoc.get()).exists) {
|
||||
|
||||
@@ -34,7 +34,7 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
const { auth_token, invite_queued } = { ...voter.data() } as { auth_token: string; invite_queued?: QueueLog[] }
|
||||
|
||||
const link = `${req.headers.origin}/election/${election_id}/vote?auth=${auth_token}`
|
||||
// const link = `https://secureinternetvoting.org/election/${election_id}/vote?auth=${auth_token}`
|
||||
// const link = `https://siv.org/election/${election_id}/vote?auth=${auth_token}`
|
||||
|
||||
return send_invitation_email({
|
||||
from: election_manager,
|
||||
|
||||
@@ -13,8 +13,7 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
if (!jwt.valid) return
|
||||
|
||||
// Don't delete if not from e2e tester
|
||||
if (jwt.email !== 'e2e-tester@secureinternetvoting.org')
|
||||
return res.status(403).json({ error: 'Can only delete test elections' })
|
||||
if (jwt.email !== 'e2e-tester@siv.org') return res.status(403).json({ error: 'Can only delete test elections' })
|
||||
|
||||
const doc = firebase.firestore().collection('elections').doc(election_id)
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
const { auth, email } = req.body
|
||||
|
||||
if (!email) return res.status(404)
|
||||
if (!('david@secureinternetvoting.org' === email || email.includes('@dsernst.com')))
|
||||
if (!('david@siv.org' === email || email.includes('@dsernst.com')))
|
||||
return res.status(401).json({ error: 'Not authorized to reset keygen' })
|
||||
|
||||
const electionDoc = firebase
|
||||
|
||||
@@ -14,7 +14,7 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
const { auth, email } = req.body
|
||||
|
||||
if (!email) return res.status(404)
|
||||
if (!('david@secureinternetvoting.org' === email || email.includes('@dsernst.com')))
|
||||
if (!('david@siv.org' === email || email.includes('@dsernst.com')))
|
||||
return res.status(401).json({ error: 'Not authorized to reset' })
|
||||
|
||||
const electionDoc = firebase
|
||||
|
||||
@@ -12,7 +12,7 @@ const { ADMIN_PASSWORD } = process.env
|
||||
// *** Script parameters ***
|
||||
const election_id = ''
|
||||
const batch_limit = 100
|
||||
const vote_page_url = `https://secureinternetvoting.org/election/${election_id}/vote`
|
||||
const vote_page_url = `https://siv.org/election/${election_id}/vote`
|
||||
// *************************
|
||||
|
||||
export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
@@ -29,7 +29,7 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
const subject_line = `Vote Invitation${election_title ? `: ${election_title}` : ''}`
|
||||
|
||||
function getMgEvents(next?: string) {
|
||||
return mailgun.get(next || '/secureinternetvoting.org/events', {
|
||||
return mailgun.get(next || '/siv.org/events', {
|
||||
ascending: 'yes',
|
||||
begin: '16 Jan 2021 10:00:00 -0800',
|
||||
// end: '16 Jan 2021 10:00:00 -0800',
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
{
|
||||
"name": "Elections",
|
||||
"short_name": "Elections",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-chrome-192x192.png?v=2",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/android-chrome-512x512.png?v=2",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"start_url": "https://secureinternetvoting.org/admin",
|
||||
"display": "standalone"
|
||||
"name": "Elections",
|
||||
"short_name": "Elections",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-chrome-192x192.png?v=2",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "/android-chrome-512x512.png?v=2",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"start_url": "https://siv.org/admin",
|
||||
"display": "standalone"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import _Head from 'next/head'
|
||||
|
||||
const card_image = `https://secureinternetvoting.org/preview.png`
|
||||
const card_image = `https://siv.org/preview.png`
|
||||
|
||||
export const Head = ({ children = <></>, title }: { children?: JSX.Element; title: string }) => {
|
||||
const full_title = `SIV: ` + title
|
||||
|
||||
@@ -21,8 +21,8 @@ export const MarkedBallots = () => {
|
||||
<div>
|
||||
This shows printing votes onto a sample ballot design.
|
||||
<p>
|
||||
Please contact <a href="mailto:help@secureinternetvoting.org">help@secureinternetvoting.org</a> to
|
||||
configure SIV with your existing ballot equipment.
|
||||
Please contact <a href="mailto:help@siv.org">help@siv.org</a> to configure SIV with your existing ballot
|
||||
equipment.
|
||||
</p>
|
||||
</div>
|
||||
<DownloadAllButton {...{ votes }} />
|
||||
|
||||
@@ -11,7 +11,7 @@ import { EncryptionAddress } from './EncryptionAddress'
|
||||
import { useLatestMailgunEvents } from './use-latest-mailgun'
|
||||
|
||||
export type Trustee = { email: string; error?: string; name?: string }
|
||||
const admin_email = 'admin@secureinternetvoting.org'
|
||||
const admin_email = 'admin@siv.org'
|
||||
|
||||
export const Observers = () => {
|
||||
const { election_id, election_manager, threshold_public_key, trustees } = useStored()
|
||||
|
||||
@@ -89,7 +89,7 @@ export const SidebarContent = ({ closeMenu = () => {} }: { closeMenu?: () => voi
|
||||
<Link href="/protocol">
|
||||
<a target="_blank">Protocol Overview</a>
|
||||
</Link>
|
||||
<Link href="mailto:help@secureinternetvoting.org">
|
||||
<Link href="mailto:help@siv.org">
|
||||
<a>Get Help</a>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
@@ -140,7 +140,7 @@ Some systems share some of these properties, however no widely deployed system h
|
||||
|
||||
Unlike most information systems, voting needs to be both authenticated (one vote per person), while also preserving strong guarantees of a secret vote, such that even administrators can’t see how anyone voted. This is unusually challenging.
|
||||
|
||||
The SIV team has understood these challenges and focused on solving them from day one. <a href="https://secureinternetvoting.org" target="_blank">SecureInternetVoting.org</a> is now available to run fast, private, & verifiable elections.`,
|
||||
The SIV team has understood these challenges and focused on solving them from day one. <a href="https://siv.org" target="_blank">siv.org</a> is now available to run fast, private, & verifiable elections.`,
|
||||
},
|
||||
{
|
||||
q: 'How does Secure Internet Voting improve upon paper voting?',
|
||||
@@ -182,7 +182,7 @@ Voter Authorization tokens can be invalidated as soon as a vote is recorded from
|
||||
},
|
||||
{
|
||||
q: 'Does SIV support other voting methods, like Approval Voting?',
|
||||
resp: `Currently, SIV supports Plurality Voting, Block Voting, and Approval Voting. We add new voting methods as requested. Please let us know if you need more: <a href="mailto:voting-methods@secureinternetvoting.org" target="_blank">voting-methods@secureinternetvoting.org</a>.
|
||||
resp: `Currently, SIV supports Plurality Voting, Block Voting, and Approval Voting. We add new voting methods as requested. Please let us know if you need more: <a href="mailto:voting-methods@siv.org" target="_blank">voting-methods@siv.org</a>.
|
||||
|
||||
Digital voting can make it much easier for voters to adopt these more advanced voting methods, with immediate feedback and automatically preventing voters from accidentally disqualifying their ballot.`,
|
||||
},
|
||||
@@ -212,7 +212,7 @@ In other words, SIV uses many similar ideas, but is specifically designed for th
|
||||
2. Discrete Logarithm Encryption
|
||||
3. An Anonymization Mixnet, verified by Zero-Knowledge Proofs
|
||||
|
||||
The specific research is listed on <a href="https://secureinternetvoting.org/about" target="_blank">secureinternetvoting.org/about</a>.`,
|
||||
The specific research is listed on <a href="https://siv.org/about" target="_blank">siv.org/about</a>.`,
|
||||
},
|
||||
{
|
||||
q: 'How long does it take to run a SIV election?',
|
||||
@@ -229,13 +229,13 @@ Once the election closes, SIV can tally millions of ballots in seconds.`,
|
||||
},
|
||||
{
|
||||
q: 'How does SIV protect voters in hostile or insecure network environments?',
|
||||
resp: `All connections to <a href="https://secureinternetvoting.org" target="_blank">secureinternetvoting.org</a> always require https Transport Layer Security.
|
||||
resp: `All connections to <a href="https://siv.org" target="_blank">siv.org</a> always require https Transport Layer Security.
|
||||
|
||||
This protects voters' network connection to prevent tampering and surveillance.`,
|
||||
},
|
||||
{
|
||||
q: 'Can my group use SIV for our private election?',
|
||||
resp: `Most likely, please contact us at <a href="mailto:private-usage@secureinternetvoting.org" target="_blank">private-usage@secureinternetvoting.org</a>.`,
|
||||
resp: `Most likely, please contact us at <a href="mailto:private-usage@siv.org" target="_blank">private-usage@siv.org</a>.`,
|
||||
},
|
||||
{
|
||||
q: 'How does SIV help election administrators with public records requests?',
|
||||
|
||||
@@ -21,7 +21,7 @@ export const AboveFold = () => (
|
||||
<a className="button" href="/admin">
|
||||
Get Started
|
||||
</a>
|
||||
<a href="mailto:team@secureinternetvoting.org">Contact Team</a>
|
||||
<a href="mailto:team@siv.org">Contact Team</a>
|
||||
</div>
|
||||
|
||||
<style jsx>{`
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { EmailSignup } from './EmailSignup'
|
||||
|
||||
const email = 'team@secureinternetvoting.org'
|
||||
const email = 'team@siv.org'
|
||||
|
||||
export const Footer = (): JSX.Element => (
|
||||
<footer>
|
||||
|
||||
@@ -2,7 +2,7 @@ import Link from 'next/link'
|
||||
|
||||
import { EmailSignup } from './EmailSignup'
|
||||
|
||||
const email = 'questions@secureinternetvoting.org'
|
||||
const email = 'questions@siv.org'
|
||||
|
||||
export const Footer = (): JSX.Element => {
|
||||
return (
|
||||
|
||||
@@ -4,7 +4,7 @@ import { EncodedsTable } from './EncodedsTable'
|
||||
import { Partials } from './Partials'
|
||||
import { RecombinedTable } from './RecombinedTable'
|
||||
|
||||
This page lays out how anyone can confirm the complete accuracy of this <a href="https://secureinternetvoting.org" target="_blank">SecureInternetVoting.org</a> Election.
|
||||
This page lays out how anyone can confirm the complete accuracy of this <a href="https://siv.org" target="_blank">siv.org</a> Election.
|
||||
|
||||
<Totals proofsPage />
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ export const VotesToDecrypt = ({
|
||||
/* Object to track which proofs have been validated
|
||||
KEY: null=tbd, true=valid, false=invalid
|
||||
{
|
||||
'admin@secureinternetvoting.org': {
|
||||
'admin@siv.org': {
|
||||
president: [null, null, null, null],
|
||||
mayor: [null, null, null, null]
|
||||
},
|
||||
|
||||
@@ -24,7 +24,7 @@ export const VotesToShuffle = ({
|
||||
/* Object to track which proofs have been validated
|
||||
KEY: null=tbd, true=valid, false=invalid
|
||||
{
|
||||
'admin@secureinternetvoting.org': {
|
||||
'admin@siv.org': {
|
||||
num_votes: 4,
|
||||
columns: {
|
||||
president: true,
|
||||
|
||||
@@ -43,5 +43,5 @@ export function ResetButton({ state }: { state: State }) {
|
||||
|
||||
// Only show for David
|
||||
export function showResetButton(state: State): boolean {
|
||||
return 'david@secureinternetvoting.org' === state.own_email || state.own_email.includes('@dsernst.com')
|
||||
return 'david@siv.org' === state.own_email || state.own_email.includes('@dsernst.com')
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@ export const Footer = ({ style }: { style?: React.CSSProperties }) => (
|
||||
<p style={{ fontSize: 11, ...style }}>
|
||||
<b>
|
||||
This election is powered by{' '}
|
||||
<a href="https://secureinternetvoting.org" rel="noreferrer" target="_blank">
|
||||
SecureInternetVoting.org
|
||||
<a href="https://siv.org" rel="noreferrer" target="_blank">
|
||||
siv.org
|
||||
</a>
|
||||
</b>
|
||||
<style jsx>{`
|
||||
|
||||
Reference in New Issue
Block a user