index page contributions

This commit is contained in:
Alexey 2020-02-05 18:02:34 +03:00
parent af76b7cdb1
commit 955983f6a9
8 changed files with 71 additions and 92 deletions

View File

@ -256,11 +256,8 @@
.table { .table {
a { a {
color: $primary; color: $primary;
&:hover {
text-decoration: underline; text-decoration: underline;
} }
}
.social-link { .social-link {
display: flex; display: flex;

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="ceremony"> <div class="ceremony">
<h1 class="title is-size-1 is-spaced">Lorem <span>Ipsum Dolor</span></h1> <h1 class="title is-size-1 is-spaced">Tornado.cash <span>Trusted setup ceremony</span></h1>
<p class="p is-size-5"> <p class="p is-size-5">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
@ -11,7 +11,9 @@
Make the contribution Make the contribution
</b-button> </b-button>
</div> </div>
<div class="currently">Currently there are <span>8999</span> contributions</div> <div class="currently">
Currently there are <span>{{ contributions.length }}</span> contributions
</div>
<b-table <b-table
:data="filteredContributions" :data="filteredContributions"
@ -28,16 +30,17 @@
<b-table-column label="Account"> <b-table-column label="Account">
<a <a
v-if="props.row.account" v-if="props.row.handle"
:href="`#${props.row.account}`" :href="`https://${props.row.socialType}.com/${props.row.handle}`"
class="social-link" class="social-link"
target="_blank" target="_blank"
> >
<span :class="`icon-${props.row.socialType}`" class="icon"></span> <span :class="`icon-${props.row.socialType}`" class="icon"></span>
{{ props.row.account }} @{{ props.row.handle }}
</a> </a>
<div v-else class="social-link"> <div v-else class="social-link">
<span :class="`icon-${props.row.socialType}`" class="icon"></span> <span :class="`icon-${props.row.socialType}`" class="icon"></span>
Anonymous
</div> </div>
</b-table-column> </b-table-column>
@ -49,8 +52,8 @@
{{ props.row.company }} {{ props.row.company }}
</b-table-column> </b-table-column>
<b-table-column label="Attestation"> <b-table-column :centered="true" label="Attestation">
<a :href="props.row.attestation" target="_blank">{{ props.row.account }}</a> <a :href="props.row.attestation" target="_blank">{{ getAttestation(props.row) }}</a>
</b-table-column> </b-table-column>
<b-table-column :centered="true" label="Contribution"> <b-table-column :centered="true" label="Contribution">
@ -114,71 +117,18 @@ export default {
}, },
data() { data() {
return { return {
contributions: [ contributions: [],
{ // contributions: [
id: 1, // {
socialType: 'twitter', // id: 1,
account: '@VitalikButerin', // socialType: 'twitter',
name: 'Vitalik Buterin', // account: '@VitalikButerin',
company: 'Ethereum', // name: 'Vitalik Buterin',
attestation: 'https://twitter.com/VitalikButerin/status/1220158987456237568', // company: 'Ethereum',
contribution: '#' // attestation: 'https://twitter.com/VitalikButerin/status/1220158987456237568',
}, // contribution: '#'
{ // }
id: 2, // ],
socialType: 'twitter',
account: '@Chims1974',
name: 'Rickey Kline',
company: 'Big Wheel',
attestation: '#',
contribution: '#'
},
{
id: 3,
socialType: 'github',
account: '@Diguest',
name: 'Ryan Obrien',
company: 'Brilliant Home',
attestation: '#',
contribution: '#'
},
{
id: 4,
socialType: 'anonymous',
account: '',
name: 'Anonymous',
company: '',
attestation: '',
contribution: '#'
},
{
id: 5,
socialType: 'github',
account: '@Mathervenrat',
name: 'William Hartwig',
company: 'New World',
attestation: '#',
contribution: '#'
},
{
id: 6,
socialType: 'twitter',
account: '@Hichercy',
name: 'Wayne Biggins',
company: 'Balanced Fortune',
attestation: '#',
contribution: '#'
},
{
id: 7,
socialType: 'anonymous',
account: '',
name: 'Anonymous',
company: '',
attestation: '',
contribution: '#'
}
],
rowsPerPage: 10, rowsPerPage: 10,
contributionSearch: '' contributionSearch: ''
} }
@ -186,9 +136,29 @@ export default {
computed: { computed: {
filteredContributions() { filteredContributions() {
return this.contributions.filter((contribution) => { return this.contributions.filter((contribution) => {
return contribution.name.toLowerCase().includes(this.contributionSearch.toLowerCase()) const name = contribution.name || 'anonymous'
return name.toLowerCase().includes(this.contributionSearch.toLowerCase())
}) })
} }
},
async mounted() {
try {
const response = await fetch('/api/contributions')
const data = await response.json()
this.contributions = data
} catch (e) {
console.error('e', e)
}
},
methods: {
getAttestation(row) {
const type = {
twitter: 'Tweet',
github: 'Gist',
anonymous: ''
}
return type[row.socialType]
}
} }
} }
</script> </script>

View File

@ -99,7 +99,7 @@ export default {
return !!this.user.name && this.user.name !== 'Anonymous' return !!this.user.name && this.user.name !== 'Anonymous'
}, },
isContributeBtnDisabled() { isContributeBtnDisabled() {
return !this.contributionType return !this.contributionType || (!this.isLoggedIn && this.contributionType !== 'anonymous')
} }
}, },
async mounted() { async mounted() {
@ -173,10 +173,10 @@ export default {
method: 'POST', method: 'POST',
body: formData body: formData
}) })
const responseData = await resp.json()
if (resp.ok) { if (resp.ok) {
this.status.msg = 'Your contribution is verified and recorded. THX BYE.' this.status.msg = 'Your contribution is verified and recorded. THX BYE.'
this.status.type = 'is-success' this.status.type = 'is-success'
const responseData = await resp.json()
this.contributionIndex = responseData.contributionIndex this.contributionIndex = responseData.contributionIndex
} else if (resp.status === 422) { } else if (resp.status === 422) {
if (retry < 3) { if (retry < 3) {

View File

@ -4,6 +4,8 @@ create table contributions
token varchar(64) not null, token varchar(64) not null,
name varchar(255) null, name varchar(255) null,
company varchar(255) null, company varchar(255) null,
handle varchar(255) null,
socialType varchar(255) not null,
hash varchar(130) null, hash varchar(130) null,
constraint contributions_pk constraint contributions_pk

View File

@ -73,10 +73,18 @@ router.post('/response', upload.single('response'), async (req, res) => {
console.log('Committing changes') console.log('Committing changes')
await fs.rename(`/tmp/tornado/${req.file.filename}`, './server/snark_files/current.params') await fs.rename(`/tmp/tornado/${req.file.filename}`, './server/snark_files/current.params')
await Contribution.insertContributionInfo(
req.body ? req.body.name || null : null, const socialType = req.session.socialType || 'anonymous'
req.body ? req.body.company || null : null let name = null
) let company = null
let handle = null
if (socialType !== 'anonymous' && req.body) {
name = req.body.name || null
company = req.body.company || null
handle = req.session.handle || null
}
await Contribution.insertContributionInfo({ name, company, handle, socialType })
console.log('Finished') console.log('Finished')
res.json({ contributionIndex: currentContributionIndex }) res.json({ contributionIndex: currentContributionIndex })
} catch (e) { } catch (e) {

View File

@ -25,7 +25,8 @@ router.get('/user_data', (req, res) => {
} else { } else {
userData = JSON.parse(data) userData = JSON.parse(data)
userData.handle = userData.screen_name userData.handle = userData.screen_name
// req.session.twitterScreenName = userData.screen_name req.session.handle = userData.screen_name
req.session.socialType = 'twitter'
} }
res.json(userData) res.json(userData)
} }

View File

@ -10,16 +10,15 @@ Contributions.currentContributionIndex = async function() {
return (rows[0].max || 0) + 1 return (rows[0].max || 0) + 1
} }
Contributions.insertContributionInfo = async function(name, company) { Contributions.insertContributionInfo = async function({ name, company, handle, socialType }) {
const token = crypto.randomBytes(32).toString('hex') const token = crypto.randomBytes(32).toString('hex')
await sql.execute('insert into contributions(token, name, company) values(?, ?, ?)', [ await sql.execute(
token, 'insert into contributions(token, name, company, handle, socialType) values(?, ?, ?, ?, ?)',
name, [token, name, company, handle, socialType]
company )
])
} }
Contributions.updateContributionInfo = async function(token, name, company) { Contributions.updateContributionInfo = async function({ token, name, company }) {
await sql.execute('insert into contributions(token, name, company) values(?, ?, ?)', [ await sql.execute('insert into contributions(token, name, company) values(?, ?, ?)', [
token, token,
name, name,
@ -28,7 +27,9 @@ Contributions.updateContributionInfo = async function(token, name, company) {
} }
Contributions.getContributions = async function() { Contributions.getContributions = async function() {
const [rows] = await db.execute('select id, name, company from contributions') const [rows] = await sql.execute(
'select id, name, company, handle, socialType from contributions'
)
return rows return rows
} }

Binary file not shown.