Replace secureinternetvoting.org -> siv.org

This commit is contained in:
David Ernst
2022-02-10 18:11:13 -08:00
parent b1cb42ffca
commit d10eee166e
25 changed files with 57 additions and 58 deletions

View File

@@ -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

View File

@@ -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>

View File

@@ -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,
}),

View File

@@ -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

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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,

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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',

View File

@@ -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"
}

View File

@@ -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

View File

@@ -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 }} />

View File

@@ -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()

View File

@@ -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>

View File

@@ -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 cant 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?',

View File

@@ -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>{`

View File

@@ -1,6 +1,6 @@
import { EmailSignup } from './EmailSignup'
const email = 'team@secureinternetvoting.org'
const email = 'team@siv.org'
export const Footer = (): JSX.Element => (
<footer>

View File

@@ -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 (

View File

@@ -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 />

View File

@@ -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]
},

View File

@@ -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,

View File

@@ -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')
}

View File

@@ -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>{`