blob: 24a0a9090c70fa3a6a4cf99777005886d99c6e04 [file] [log] [blame]
import HCaptcha from 'react-hcaptcha';
import Axios from 'axios';
import Router from 'next/router';
import React from 'react';
import Header from '../../../Components/Header'
import { useReward } from 'react-rewards';
import { Card, CardRow } from '../../../Components/Card';
import { AutoLayout, Panel, Title, Text, Divider } from '../../../Components/Panels';
import { List, ListItem } from '../../../Components/Texttools';
import { useColorMode } from 'theme-ui';
function Verify(props) {
const [clicked, setClicked] = React.useState(false);
const { reward: reward, isAnimating: isAnimating } = useReward('confetti', 'confetti', {
elementSize: 10,
elementCount: 150,
startVelocity: 35,
lifetime: 300,
decay: 0.94,
spread: 170,
position: "absolute",
colors: ["#68D49E"]
});
async function submitForm(tkn) {
if ( clicked ) {
Router.push('/nucleus/verify/alreadyVerified', '/nucleus/verify/success');
}
setClicked(true);
reward();
let code = await Axios.post('/api/nucleus/verify/complete', {
code: props.code,
tkn: tkn
});
setTimeout(() => {
if (code.data.success === true ) return Router.push('/nucleus/verify/success','/nucleus/verify')
else return Router.push('/nucleus/verify/failure','/nucleus/verify')
}, 2500);
}
return <>
<Header
name={props.guild_name}
customImage={props.guild_icon_url}
roundImage={true}
subtext={`Welcome, ${props.username}`}
gradient={["F27878", "D96B6B"]}
wave="web/waves/header/nucleus"
buttons={[]}
season={props.season}
/>
<AutoLayout>
<Panel>
<Title>Verify</Title>
<Divider name="commands"/>
<Text>Complete the check below to join {props.guild_name}</Text>
<div style={{height: "125px"}}>
<HCaptcha
id="Captchas mitigate problems"
sitekey="85074411-fa13-4d9b-b901-53095c6d1fc6"
onVerify={tkn => submitForm(tkn)}
theme="dark"
/>
</div>
<List colour="F27878">
<ListItem>This is an automatic check performed by Nucleus.</ListItem>
<ListItem>By clicking Proceed, you will be given the <code>{props.role_name}</code> role in <code>{props.guild_name}</code>.</ListItem>
<ListItem>For the full list of data stored by Nucleus, please check <a href="https://clicksminuteper.github.io/policies/nucleus#verification">here</a></ListItem>
</List>
<div id="confetti" />
</Panel>
</AutoLayout>
</>
}
export default Verify;
export async function getServerSideProps(ctx) {
if(!ctx.query.code) {
return {
redirect: {
destination: '/nucleus/verify/about',
permanent: true
}
}
}
let code;
try {
code = await Axios.get(`${process.env.NUCLEUS_CALLBACK}verify/${ctx.query.code}`);
} catch (e) {
return {
redirect: {
destination: '/nucleus/verify/failure',
permanent: true
}
}
}
let headers = ctx.req.headers;
return {
props: {
uID: code.data.uID,
role_name: code.data.rName,
gID: code.data.gID,
guild_name: code.data.gName,
guild_icon_url: code.data.gIcon,
username: code.data.uName,
headers: headers,
code: ctx.query.code
}
}
}