Merge branch 'main' of https://github.com/Danko-chan/url-minify
|
@ -117,6 +117,15 @@
|
|||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Danko-chan",
|
||||
"name": "Abhay Verma",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/55607738?v=4",
|
||||
"profile": "https://github.com/Danko-chan",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 7,
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
"code": "ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND",
|
||||
"err": {
|
||||
"name": "pnpm",
|
||||
"message": "No package.json (or package.yaml, or package.json5) was found in \"/home/chirag/Desktop/jwoc/url-minify\".",
|
||||
"message": "No package.json (or package.yaml, or package.json5) was found in \"D:\\url-minify\".",
|
||||
"code": "ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND",
|
||||
"stack": "pnpm: No package.json (or package.yaml, or package.json5) was found in \"/home/chirag/Desktop/jwoc/url-minify\".\n at readProjectManifest (/usr/local/lib/node_modules/pnpm/dist/pnpm.cjs:19808:13)\n at async Object.readProjectManifestOnly (/usr/local/lib/node_modules/pnpm/dist/pnpm.cjs:19812:28)\n at async readProjectManifestOnly (/usr/local/lib/node_modules/pnpm/dist/pnpm.cjs:43691:24)\n at async Object.handler (/usr/local/lib/node_modules/pnpm/dist/pnpm.cjs:177805:24)\n at async /usr/local/lib/node_modules/pnpm/dist/pnpm.cjs:182068:21\n at async run (/usr/local/lib/node_modules/pnpm/dist/pnpm.cjs:182042:34)\n at async runPnpm (/usr/local/lib/node_modules/pnpm/dist/pnpm.cjs:182261:5)\n at async /usr/local/lib/node_modules/pnpm/dist/pnpm.cjs:182253:7"
|
||||
"stack": "pnpm: No package.json (or package.yaml, or package.json5) was found in \"D:\\url-minify\".\n at readProjectManifest (C:\\Users\\chira\\AppData\\Roaming\\npm\\node_modules\\pnpm\\dist\\pnpm.cjs:19805:13)\n at async Object.readProjectManifestOnly (C:\\Users\\chira\\AppData\\Roaming\\npm\\node_modules\\pnpm\\dist\\pnpm.cjs:19809:28)\n at async readProjectManifestOnly (C:\\Users\\chira\\AppData\\Roaming\\npm\\node_modules\\pnpm\\dist\\pnpm.cjs:43712:24)\n at async Object.handler (C:\\Users\\chira\\AppData\\Roaming\\npm\\node_modules\\pnpm\\dist\\pnpm.cjs:177753:24)\n at async C:\\Users\\chira\\AppData\\Roaming\\npm\\node_modules\\pnpm\\dist\\pnpm.cjs:182016:21\n at async run (C:\\Users\\chira\\AppData\\Roaming\\npm\\node_modules\\pnpm\\dist\\pnpm.cjs:181990:34)\n at async runPnpm (C:\\Users\\chira\\AppData\\Roaming\\npm\\node_modules\\pnpm\\dist\\pnpm.cjs:182209:5)\n at async C:\\Users\\chira\\AppData\\Roaming\\npm\\node_modules\\pnpm\\dist\\pnpm.cjs:182201:7"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
<h1 align="center">Welcome to url-minify 👋</h1>
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
||||
[![All Contributors](https://img.shields.io/badge/All_Contributors-12-orange.svg)](#-our-contributors)
|
||||
[![All Contributors](https://img.shields.io/badge/all_contributors-13-orange.svg?style=flat-square)](#contributors-)
|
||||
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
||||
|
||||
<a href="LICENSE" target="_blank">
|
||||
|
@ -150,6 +150,7 @@ Thanks goes to these wonderful people:
|
|||
<td align="center"><a href="https://github.com/Tejas-117"><img src="https://avatars.githubusercontent.com/u/75026048?v=4?s=55" width="55px;" alt=""/><br /><sub><b>Tejas</b></sub></a><br /><a href="https://github.com/BRAVO68WEB/url-minify/commits?author=Tejas-117" title="Code">💻</a></td>
|
||||
<td align="center"><a href="http://www.linkedin.com/in/omar-sherif-2152021a3"><img src="https://avatars.githubusercontent.com/u/69806823?v=4?s=55" width="55px;" alt=""/><br /><sub><b>Omar Sherif Ali</b></sub></a><br /><a href="https://github.com/BRAVO68WEB/url-minify/commits?author=omar-sherif9992" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/aadityasinha-dotcom"><img src="https://avatars.githubusercontent.com/u/75474786?v=4?s=55" width="55px;" alt=""/><br /><sub><b>Aaditya Sinha</b></sub></a><br /><a href="https://github.com/BRAVO68WEB/url-minify/commits?author=aadityasinha-dotcom" title="Code">💻</a></td>
|
||||
<td align="center"><a href="https://github.com/Danko-chan"><img src="https://avatars.githubusercontent.com/u/55607738?v=4?s=55" width="55px;" alt=""/><br /><sub><b>Abhay Verma</b></sub></a><br /><a href="https://github.com/BRAVO68WEB/url-minify/commits?author=Danko-chan" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
MONGO_DB=mongo-uri
|
||||
MONGO_DB=mongodb://localhost:27017/urlMinify
|
||||
SECRET=secret
|
||||
AUTH_SECRET=secret
|
|
@ -2,6 +2,12 @@ const Minfy = require('../models/minifed_urls')
|
|||
const base_url = 'https://minfy.xyz/'
|
||||
const { nanoid } = require('nanoid')
|
||||
|
||||
const blackListedAliases = ['404','dashboard','qr','credits','github','admin','geo','all','me','go','upload','download','link','about','tos','faqs']
|
||||
|
||||
function verifyAlias(alias) {
|
||||
const boolean = blackListedAliases.find(element => element===alias);
|
||||
return boolean;
|
||||
}
|
||||
module.exports.getAllData = async (req, res) => {
|
||||
Minfy.find({})
|
||||
.then((data) => {
|
||||
|
@ -72,7 +78,7 @@ module.exports.addURL = async (req, res) => {
|
|||
Minfy.create({
|
||||
originalUrl: req.body.originalUrl,
|
||||
alias: alias,
|
||||
minifiedUrl: minifiedUrl
|
||||
minifiedUrl: minifiedUrl,
|
||||
})
|
||||
.then((data) => {
|
||||
res.json(data)
|
||||
|
@ -111,6 +117,12 @@ module.exports.updateUrlData = async (req, res) => {
|
|||
|
||||
module.exports.addURLAuthed = async (req, res) => {
|
||||
const { alias, originalUrl } = req.body
|
||||
if(verifyAlias(alias))
|
||||
{
|
||||
res.sendStatus(500);
|
||||
throw new Error('This alias cannot be used, try some another.');
|
||||
}
|
||||
|
||||
var createdBy = req.user.data.email
|
||||
// console.log(req.user);
|
||||
const minifiedUrl = base_url + alias
|
||||
|
@ -145,3 +157,14 @@ module.exports.visitor = async (req, res) => {
|
|||
res.sendStatus(500)
|
||||
})
|
||||
}
|
||||
|
||||
module.exports.getAllurlsforUser = async (req, res) => {
|
||||
Minfy.find({ createdBy: req.user.data.email })
|
||||
.then((data) => {
|
||||
res.send(data)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
res.sendStatus(500)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ router.get('/alias/:alias/status', controller.getAliasStatus)
|
|||
|
||||
router.post('/add', controller.addURL)
|
||||
router.post('/add/custom', auth, controller.addURLAuthed)
|
||||
router.get('/all/user', auth, controller.getAllurlsforUser)
|
||||
|
||||
router.patch('/edit/:id', auth, controller.updateUrlData)
|
||||
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
NODE_ENV=dev
|
||||
NEXT_PUBLIC_API_URL=https://api.minfy.xyz
|
||||
#NEXT_PUBLIC_API_URL=https://api.minfy.xyz
|
||||
NEXT_PUBLIC_API_URL=http://localhost:5000
|
||||
|
|
After Width: | Height: | Size: 87 KiB |
|
@ -0,0 +1,115 @@
|
|||
import React, { useState } from 'react'
|
||||
import ContributorsStyle from './Contributors.style'
|
||||
import styles from '../../styles/Contributors.module.css'
|
||||
import Image from 'next/image'
|
||||
import profilepic from 'assets/ContributorsImages/sampleImage.jpg'
|
||||
import { GitHub } from '@mui/icons-material'
|
||||
import Head from "next/head";
|
||||
import Script from "next/script";
|
||||
|
||||
export default function Contributors() {
|
||||
const [contributors, setContributors] = useState([
|
||||
{
|
||||
id: 1,
|
||||
profilepic,
|
||||
name: 'Jacob Myers',
|
||||
gitHubUsername: '@jacob',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
profilepic,
|
||||
name: 'John Doe',
|
||||
gitHubUsername: '@john',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
profilepic,
|
||||
name: 'Sara Williams',
|
||||
gitHubUsername: '@sara',
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
profilepic,
|
||||
name: 'Sara Williams',
|
||||
gitHubUsername: '@sara',
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
profilepic,
|
||||
name: 'Sara Williams',
|
||||
gitHubUsername: '@sara',
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
profilepic,
|
||||
name: 'Sara Williams',
|
||||
gitHubUsername: '@sara',
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
profilepic,
|
||||
name: 'Sara Williams',
|
||||
gitHubUsername: '@sara',
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
profilepic,
|
||||
name: 'Sara Williams',
|
||||
gitHubUsername: '@sara',
|
||||
},
|
||||
{
|
||||
id: 9,
|
||||
profilepic,
|
||||
name: 'Sara Williams',
|
||||
gitHubUsername: '@sara',
|
||||
},
|
||||
])
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
|
||||
crossOrigin="anonymous"
|
||||
/>
|
||||
</Head>
|
||||
<Script
|
||||
id="bootstrap-cdn"
|
||||
src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" />
|
||||
|
||||
<ContributorsStyle>
|
||||
<>
|
||||
<div className={styles.head}>CONTRIBUTORS</div>
|
||||
<div class="conatiner contributor-cards">
|
||||
<div className="contributor-cards row">
|
||||
{contributors.map((contributor) => {
|
||||
return (
|
||||
<div className="contributor-card col-3" key={contributor.id}>
|
||||
<div className="contributor-cardPointerStart">
|
||||
<div id="circle"></div>
|
||||
</div>
|
||||
<div id="ImageContainer">
|
||||
<Image
|
||||
src={contributor.profilepic}
|
||||
alt="Contributors Profile Picture"
|
||||
width={'100px'}
|
||||
height={'100px'}
|
||||
className="contributor-Pic"
|
||||
/>
|
||||
</div>
|
||||
<div id="contributorDetailsWrapper">
|
||||
<div className="contributor-Name">{contributor.name}</div>
|
||||
<div className="contributor-GithubUsername">
|
||||
<GitHub />
|
||||
<span id="username">{contributor.gitHubUsername}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
</ContributorsStyle>
|
||||
</>
|
||||
)
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
import styled from 'styled-components'
|
||||
export default styled.section`
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
.contributor-cards{
|
||||
display: flex;
|
||||
width: 85%;
|
||||
align-item: center;
|
||||
justify-content: center;
|
||||
margin:20px;
|
||||
margin-left: 6%
|
||||
}
|
||||
.contributor-card {
|
||||
width: 240px;
|
||||
height: 250px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
background-color: #ffffff;
|
||||
border-radius: 10px;
|
||||
margin: 15px;
|
||||
padding: 5px;
|
||||
}
|
||||
.contributor-cardPointerStart {
|
||||
width: 180px;
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
#circle {
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
border-radius: 50%;
|
||||
background-color: green;
|
||||
}
|
||||
.contributor-Pic {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
#ImageContainer {
|
||||
border-radius: 50%;
|
||||
border: 3px solid #35cdf0;
|
||||
overflow: hidden;
|
||||
}
|
||||
.contributor-Name {
|
||||
color: #1d92e0;
|
||||
font-size: 25px;
|
||||
font-weight: bold;
|
||||
}
|
||||
#contributorDetailsWrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justfiy-content: flex-start;
|
||||
}
|
||||
.contributor-GithubUsername {
|
||||
display: flex;
|
||||
justify-content: baseline;
|
||||
font-size: 20px;
|
||||
}
|
||||
#username {
|
||||
color: grey;
|
||||
font-weight: bold;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
`
|
|
@ -1,18 +1,18 @@
|
|||
import React from 'react'
|
||||
import LoginStyle from './Login.style'
|
||||
import AccountCircleIcon from '@mui/icons-material/AccountCircle'
|
||||
// import AccountCircleIcon from '@mui/icons-material/AccountCircle'
|
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
|
||||
import {
|
||||
faUser,
|
||||
faEnvelope,
|
||||
faLock,
|
||||
} from '@fortawesome/free-solid-svg-icons'
|
||||
import { UserContext } from '../../helpers/user/usercontext'
|
||||
import { faEnvelope, faLock } from '@fortawesome/free-solid-svg-icons'
|
||||
import UserContext from '../../helpers/user/usercontext'
|
||||
import { useState } from 'react'
|
||||
import Link from 'next/link'
|
||||
import { useContext } from 'react'
|
||||
import { useRouter } from 'next/router'
|
||||
|
||||
function Login() {
|
||||
const router = useRouter()
|
||||
const user = useContext(UserContext)
|
||||
|
||||
const [userData, setUserData] = useState({
|
||||
email: '',
|
||||
password: '',
|
||||
|
@ -24,9 +24,17 @@ function Login() {
|
|||
setUserData({ ...userData, [name]: value })
|
||||
}
|
||||
|
||||
const handleLogin = (evt) => {
|
||||
evt.preventDefault()
|
||||
user.login(userData)
|
||||
}
|
||||
|
||||
if (user.user) {
|
||||
router.push('/dashboard')
|
||||
}
|
||||
return (
|
||||
<LoginStyle>
|
||||
<form className="form-wrapper">
|
||||
<form className="form-wrapper" onSubmit={handleLogin}>
|
||||
<p className="reg-title">Sign in</p>
|
||||
|
||||
<img src="/images/user.png"></img>
|
||||
|
@ -61,11 +69,9 @@ function Login() {
|
|||
/>
|
||||
</div>
|
||||
|
||||
<Link href="/">
|
||||
<button type="submit" className="submit-button">
|
||||
Submit
|
||||
</button>
|
||||
</Link>
|
||||
<button type="submit" className="submit-button">
|
||||
Submit
|
||||
</button>
|
||||
|
||||
<p className="foot-text">
|
||||
New here?
|
||||
|
|
|
@ -50,8 +50,19 @@ function Index(props) {
|
|||
>
|
||||
<Container maxWidth="xl">
|
||||
<Toolbar disableGutters="false">
|
||||
<span><Logo /></span>
|
||||
<Typography component={motion.div} initial={{ y: -50, opacity: 0 }} animate={{ y: 0, opacity: 1, transition: { delay: 1 } }} variant="h5" sx={{ fontWeight: 'bold', fontFamily: "'Montserrat Alternates', sans-serif;" }}>
|
||||
<span>
|
||||
<Logo />
|
||||
</span>
|
||||
<Typography
|
||||
component={motion.div}
|
||||
initial={{ y: -50, opacity: 0 }}
|
||||
animate={{ y: 0, opacity: 1, transition: { delay: 1 } }}
|
||||
variant="h5"
|
||||
sx={{
|
||||
fontWeight: 'bold',
|
||||
fontFamily: "'Montserrat Alternates', sans-serif;",
|
||||
}}
|
||||
>
|
||||
UrlMiniFy
|
||||
</Typography>
|
||||
<Box
|
||||
|
@ -94,7 +105,11 @@ function Index(props) {
|
|||
href="https://github.com/BRAVO68WEB/url-minify"
|
||||
target={'_blank'}
|
||||
>
|
||||
<Typography textAlign="center" variant="h6" sx={{ display: 'flex' }}>
|
||||
<Typography
|
||||
textAlign="center"
|
||||
variant="h6"
|
||||
sx={{ display: 'flex' }}
|
||||
>
|
||||
<GitHubIcon fontSize="medium" />
|
||||
GitHub
|
||||
</Typography>
|
||||
|
@ -102,7 +117,11 @@ function Index(props) {
|
|||
</MenuItem>
|
||||
<MenuItem onClick={handleCloseNavMenu}>
|
||||
<a href={NotFound}>
|
||||
<Typography textAlign="center" variant="h6" sx={{ display: 'flex' }}>
|
||||
<Typography
|
||||
textAlign="center"
|
||||
variant="h6"
|
||||
sx={{ display: 'flex' }}
|
||||
>
|
||||
CREDITS
|
||||
</Typography>
|
||||
</a>
|
||||
|
@ -158,7 +177,7 @@ function Index(props) {
|
|||
fontWeight: 'bold',
|
||||
}}
|
||||
>
|
||||
CREDITS
|
||||
<Link href="./contributors">CREDITS</Link>
|
||||
</Button>
|
||||
</a>
|
||||
</Box>
|
||||
|
@ -198,16 +217,20 @@ function Index(props) {
|
|||
</Menu>
|
||||
</Box>
|
||||
) : (
|
||||
<Typography sx={{
|
||||
color: 'white',
|
||||
display: 'flex',
|
||||
fontSize: 'h6.fontSize',
|
||||
fontFamily: "'Open Sans', sans-serif;",
|
||||
fontWeight: 'bold',
|
||||
}} component={motion.div}
|
||||
<Typography
|
||||
sx={{
|
||||
color: 'white',
|
||||
display: 'flex',
|
||||
fontSize: 'h6.fontSize',
|
||||
fontFamily: "'Open Sans', sans-serif;",
|
||||
fontWeight: 'bold',
|
||||
}}
|
||||
component={motion.div}
|
||||
initial={{ y: -50, opacity: 0 }}
|
||||
animate={{ y: 0, opacity: 1, transition: { delay: 1 } }}
|
||||
whileHover={{ scale: 1.1, textShadow: '2px 2px black' }} onClick={login}>
|
||||
whileHover={{ scale: 1.1, textShadow: '2px 2px black' }}
|
||||
onClick={login}
|
||||
>
|
||||
<Link href="./login">LOGIN</Link>
|
||||
</Typography>
|
||||
)}
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
import React from 'react'
|
||||
import RegStyle from './Reg.style'
|
||||
import Image from 'next/image'
|
||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
|
||||
import { faUser, faEnvelope, faLock } from '@fortawesome/free-solid-svg-icons'
|
||||
import { useState, useContext } from 'react'
|
||||
import { Link } from '@mui/material'
|
||||
import UserAuth from 'helpers/user/usercontext'
|
||||
import { useRouter } from 'next/router'
|
||||
|
||||
function Reg() {
|
||||
const router = useRouter()
|
||||
const context = useContext(UserAuth)
|
||||
const [userData, setUserData] = useState({
|
||||
username: '',
|
||||
email: '',
|
||||
|
@ -25,7 +27,10 @@ function Reg() {
|
|||
setUserData(userData)
|
||||
context.createAcc(userData)
|
||||
}
|
||||
const context = useContext(UserAuth);
|
||||
|
||||
if (context.user) {
|
||||
router.push('/dashboard')
|
||||
}
|
||||
return (
|
||||
<RegStyle>
|
||||
<form onSubmit={handleSubmit} className="form-wrapper">
|
||||
|
|
|
@ -1,31 +1,102 @@
|
|||
import UserAuth from './usercontext'
|
||||
import { useState } from 'react'
|
||||
import axios from 'helpers/Axios'
|
||||
import { useEffect } from 'react'
|
||||
|
||||
const storeJWT = (data) => {
|
||||
let jwt = data
|
||||
try {
|
||||
localStorage.setItem('jwt', jwt)
|
||||
return false
|
||||
} catch (e) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
const fetchJWT = () => {
|
||||
try {
|
||||
let jwt = localStorage.getItem('jwt')
|
||||
return jwt
|
||||
} catch (e) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
const UserAuthProvider = ({ children }) => {
|
||||
const [user, setUser] = useState(null)
|
||||
const login = () => {
|
||||
setUser('default')
|
||||
const [jwt, setJwt] = useState(null)
|
||||
const login = async ({ email, password }) => {
|
||||
let login = true
|
||||
await axios
|
||||
.post(`/user/login`, {
|
||||
email: email,
|
||||
password: password,
|
||||
})
|
||||
.then(function (response) {
|
||||
setJwt(response.data.access_token)
|
||||
storeJWT(response.data.access_token)
|
||||
})
|
||||
.catch(function (error) {
|
||||
login = false
|
||||
console.error(error)
|
||||
})
|
||||
return login
|
||||
}
|
||||
const createAcc = (data) => {
|
||||
axios
|
||||
const createAcc = async ({ email, password, name }) => {
|
||||
let register = true
|
||||
await axios
|
||||
.post(`/user/register`, {
|
||||
email: data.email,
|
||||
password: data.password,
|
||||
name: data.name,
|
||||
email: email,
|
||||
password: password,
|
||||
name: name,
|
||||
})
|
||||
.then(function (response) {
|
||||
console.log(response)
|
||||
setJwt(response.data)
|
||||
storeJWT(response.data)
|
||||
})
|
||||
.catch(function (error) {
|
||||
console.log(error)
|
||||
register = false
|
||||
console.error(error)
|
||||
})
|
||||
return register
|
||||
}
|
||||
const fetchUser = async () => {
|
||||
if (!jwt) {
|
||||
return
|
||||
}
|
||||
axios({
|
||||
headers: {
|
||||
Authorization: jwt,
|
||||
},
|
||||
method: 'GET',
|
||||
url: '/user/me',
|
||||
})
|
||||
.then((user) => {
|
||||
setUser(user.data)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
setJwt(null)
|
||||
setUser(null)
|
||||
storeJWT(null)
|
||||
})
|
||||
}
|
||||
|
||||
const logout = () => {
|
||||
setUser(null)
|
||||
setJwt(null)
|
||||
storeJWT(null)
|
||||
}
|
||||
const context = { user, login, logout, createAcc }
|
||||
const context = { jwt, user, login, logout, createAcc }
|
||||
useEffect(() => {
|
||||
let jwt = fetchJWT()
|
||||
if (jwt) {
|
||||
setJwt(jwt)
|
||||
}
|
||||
}, [])
|
||||
useEffect(() => {
|
||||
fetchUser()
|
||||
}, [jwt])
|
||||
|
||||
return <UserAuth.Provider value={context}>{children}</UserAuth.Provider>
|
||||
}
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"verbose": true,
|
||||
"ignore": ["node_modules", ".next"],
|
||||
"watch": ["server/**/*", "index.js"],
|
||||
"ext": "js json"
|
||||
}
|
|
@ -57,6 +57,7 @@
|
|||
},
|
||||
"homepage": "https://github.com/bravo68web/url-minify#readme",
|
||||
"devDependencies": {
|
||||
"nodemon": "^2.0.15",
|
||||
"prettier": "2.5.1"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,15 +6,12 @@ import '../styles/404.css'
|
|||
import UserAuthProvider from 'helpers/user/userState'
|
||||
import Page from 'react-page-loading'
|
||||
|
||||
|
||||
function MyApp({ Component, pageProps }) {
|
||||
return (
|
||||
<UserAuthProvider>
|
||||
<Page loader={"bar"} color={"#03b1fc"} size={10} >
|
||||
<Page loader={'bar'} color={'#03b1fc'} size={10}>
|
||||
<Component {...pageProps} />
|
||||
|
||||
</Page>
|
||||
|
||||
</UserAuthProvider>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
import React from 'react'
|
||||
import Navbar from 'components/NavBar'
|
||||
import Contributors from 'components/Contributors/Contributors'
|
||||
function contributors() {
|
||||
return (
|
||||
<>
|
||||
<main className={'main-bg'}>
|
||||
<Navbar />
|
||||
<Contributors />
|
||||
</main>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default contributors
|
|
@ -1,5 +1 @@
|
|||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="64" height="64" rx="32" fill="#662CDC" fill-opacity="0.2"/>
|
||||
<path d="M32 41C40.2843 41 47 32 47 32C47 32 40.2843 23 32 23C23.7157 23 17 32 17 32C17 32 23.7157 41 32 41Z" stroke="#662CDC" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M32 35C33.6569 35 35 33.6569 35 32C35 30.3431 33.6569 29 32 29C30.3431 29 29 30.3431 29 32C29 33.6569 30.3431 35 32 35Z" stroke="#662CDC" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><rect width="64" height="64" fill="#662CDC" fill-opacity=".2" rx="32"/><path stroke="#662CDC" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M32 41C40.2843 41 47 32 47 32C47 32 40.2843 23 32 23C23.7157 23 17 32 17 32C17 32 23.7157 41 32 41Z"/><path stroke="#662CDC" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M32 35C33.6569 35 35 33.6569 35 32C35 30.3431 33.6569 29 32 29C30.3431 29 29 30.3431 29 32C29 33.6569 30.3431 35 32 35Z"/></svg>
|
Before Width: | Height: | Size: 594 B After Width: | Height: | Size: 576 B |
|
@ -1,6 +1 @@
|
|||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="64" height="64" rx="32" fill="#43BFD6" fill-opacity="0.2"/>
|
||||
<path d="M26 30.5C25.1716 30.5 24.5 31.1716 24.5 32C24.5 32.8284 25.1716 33.5 26 33.5V30.5ZM38 33.5C38.8284 33.5 39.5 32.8284 39.5 32C39.5 31.1716 38.8284 30.5 38 30.5V33.5ZM26 33.5H38V30.5H26V33.5Z" fill="#43BFD6"/>
|
||||
<path d="M36.5 24.5C35.6716 24.5 35 25.1716 35 26C35 26.8284 35.6716 27.5 36.5 27.5V24.5ZM36.5 36.5C35.6716 36.5 35 37.1716 35 38C35 38.8284 35.6716 39.5 36.5 39.5V36.5ZM36.5 27.5H39.5V24.5H36.5V27.5ZM39.5 36.5H36.5V39.5H39.5V36.5ZM44 32C44 34.4853 41.9853 36.5 39.5 36.5V39.5C43.6421 39.5 47 36.1421 47 32H44ZM39.5 27.5C41.9853 27.5 44 29.5147 44 32H47C47 27.8579 43.6421 24.5 39.5 24.5V27.5Z" fill="#43BFD6"/>
|
||||
<path d="M27.5 27.5C28.3284 27.5 29 26.8284 29 26C29 25.1716 28.3284 24.5 27.5 24.5V27.5ZM27.5 39.5C28.3284 39.5 29 38.8284 29 38C29 37.1716 28.3284 36.5 27.5 36.5V39.5ZM27.5 24.5H24.5V27.5H27.5V24.5ZM24.5 39.5H27.5V36.5H24.5V39.5ZM17 32C17 36.1421 20.3579 39.5 24.5 39.5V36.5C22.0147 36.5 20 34.4853 20 32H17ZM24.5 24.5C20.3579 24.5 17 27.8579 17 32H20C20 29.5147 22.0147 27.5 24.5 27.5V24.5Z" fill="#43BFD6"/>
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><rect width="64" height="64" fill="#43BFD6" fill-opacity=".2" rx="32"/><path fill="#43BFD6" d="M26 30.5C25.1716 30.5 24.5 31.1716 24.5 32C24.5 32.8284 25.1716 33.5 26 33.5V30.5ZM38 33.5C38.8284 33.5 39.5 32.8284 39.5 32C39.5 31.1716 38.8284 30.5 38 30.5V33.5ZM26 33.5H38V30.5H26V33.5Z"/><path fill="#43BFD6" d="M36.5 24.5C35.6716 24.5 35 25.1716 35 26C35 26.8284 35.6716 27.5 36.5 27.5V24.5ZM36.5 36.5C35.6716 36.5 35 37.1716 35 38C35 38.8284 35.6716 39.5 36.5 39.5V36.5ZM36.5 27.5H39.5V24.5H36.5V27.5ZM39.5 36.5H36.5V39.5H39.5V36.5ZM44 32C44 34.4853 41.9853 36.5 39.5 36.5V39.5C43.6421 39.5 47 36.1421 47 32H44ZM39.5 27.5C41.9853 27.5 44 29.5147 44 32H47C47 27.8579 43.6421 24.5 39.5 24.5V27.5Z"/><path fill="#43BFD6" d="M27.5 27.5C28.3284 27.5 29 26.8284 29 26C29 25.1716 28.3284 24.5 27.5 24.5V27.5ZM27.5 39.5C28.3284 39.5 29 38.8284 29 38C29 37.1716 28.3284 36.5 27.5 36.5V39.5ZM27.5 24.5H24.5V27.5H27.5V24.5ZM24.5 39.5H27.5V36.5H24.5V39.5ZM17 32C17 36.1421 20.3579 39.5 24.5 39.5V36.5C22.0147 36.5 20 34.4853 20 32H17ZM24.5 24.5C20.3579 24.5 17 27.8579 17 32H20C20 29.5147 22.0147 27.5 24.5 27.5V24.5Z"/></svg>
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
@ -1,4 +1 @@
|
|||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="64" height="64" rx="32" fill="#27AE60" fill-opacity="0.2"/>
|
||||
<path d="M20 32.0002L27.4246 39.4248L43.3345 23.5149" stroke="#27AE60" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><rect width="64" height="64" fill="#27AE60" fill-opacity=".2" rx="32"/><path stroke="#27AE60" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M20 32.0002L27.4246 39.4248L43.3345 23.5149"/></svg>
|
Before Width: | Height: | Size: 321 B After Width: | Height: | Size: 308 B |
|
@ -1,4 +1 @@
|
|||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="64" height="64" rx="32" fill="#D9F2F7"/>
|
||||
<path d="M24.3 29.26H21.86L19.34 36.22L16.76 29.26H14.2L18.16 39H20.48L24.3 29.26ZM30.5678 39V26.04H28.4878C28.2078 27.4 26.9278 28.44 25.0678 28.48V30.12H28.2078V39H30.5678ZM33.2111 37.5C33.2111 38.4 33.9311 39.12 34.8311 39.12C35.7311 39.12 36.4711 38.4 36.4711 37.5C36.4711 36.6 35.7311 35.86 34.8311 35.86C33.9311 35.86 33.2111 36.6 33.2111 37.5ZM40.6784 32.52C40.6784 30.88 40.9584 29.62 41.5984 28.82C42.0384 28.24 42.6584 27.86 43.5984 27.86C44.5384 27.86 45.1384 28.24 45.5984 28.82C46.2184 29.62 46.4984 30.88 46.4984 32.52C46.4984 34.16 46.2184 35.42 45.5984 36.22C45.1384 36.8 44.5384 37.18 43.5984 37.18C42.6584 37.18 42.0384 36.8 41.5984 36.22C40.9784 35.42 40.6784 34.16 40.6784 32.52ZM38.2984 32.52C38.2984 34.24 38.5784 35.86 39.4584 37.18C40.2984 38.44 41.6584 39.3 43.5984 39.3C45.5384 39.3 46.8784 38.44 47.7184 37.18C48.5984 35.86 48.8784 34.24 48.8784 32.52C48.8784 30.8 48.5984 29.18 47.7184 27.86C46.8784 26.6 45.5384 25.74 43.5984 25.74C41.6584 25.74 40.2984 26.6 39.4584 27.86C38.5784 29.18 38.2984 30.8 38.2984 32.52Z" fill="#43BFD6"/>
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><rect width="64" height="64" fill="#D9F2F7" rx="32"/><path fill="#43BFD6" d="M24.3 29.26H21.86L19.34 36.22L16.76 29.26H14.2L18.16 39H20.48L24.3 29.26ZM30.5678 39V26.04H28.4878C28.2078 27.4 26.9278 28.44 25.0678 28.48V30.12H28.2078V39H30.5678ZM33.2111 37.5C33.2111 38.4 33.9311 39.12 34.8311 39.12C35.7311 39.12 36.4711 38.4 36.4711 37.5C36.4711 36.6 35.7311 35.86 34.8311 35.86C33.9311 35.86 33.2111 36.6 33.2111 37.5ZM40.6784 32.52C40.6784 30.88 40.9584 29.62 41.5984 28.82C42.0384 28.24 42.6584 27.86 43.5984 27.86C44.5384 27.86 45.1384 28.24 45.5984 28.82C46.2184 29.62 46.4984 30.88 46.4984 32.52C46.4984 34.16 46.2184 35.42 45.5984 36.22C45.1384 36.8 44.5384 37.18 43.5984 37.18C42.6584 37.18 42.0384 36.8 41.5984 36.22C40.9784 35.42 40.6784 34.16 40.6784 32.52ZM38.2984 32.52C38.2984 34.24 38.5784 35.86 39.4584 37.18C40.2984 38.44 41.6584 39.3 43.5984 39.3C45.5384 39.3 46.8784 38.44 47.7184 37.18C48.5984 35.86 48.8784 34.24 48.8784 32.52C48.8784 30.8 48.5984 29.18 47.7184 27.86C46.8784 26.6 45.5384 25.74 43.5984 25.74C41.6584 25.74 40.2984 26.6 39.4584 27.86C38.5784 29.18 38.2984 30.8 38.2984 32.52Z"/></svg>
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
@ -1,4 +1 @@
|
|||
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="64" height="64" rx="32" fill="#D9F2F7"/>
|
||||
<path d="M24.3 29.26H21.86L19.34 36.22L16.76 29.26H14.2L18.16 39H20.48L24.3 29.26ZM30.5678 39V26.04H28.4878C28.2078 27.4 26.9278 28.44 25.0678 28.48V30.12H28.2078V39H30.5678ZM33.2111 37.5C33.2111 38.4 33.9311 39.12 34.8311 39.12C35.7311 39.12 36.4711 38.4 36.4711 37.5C36.4711 36.6 35.7311 35.86 34.8311 35.86C33.9311 35.86 33.2111 36.6 33.2111 37.5ZM40.6784 32.52C40.6784 30.88 40.9584 29.62 41.5984 28.82C42.0384 28.24 42.6584 27.86 43.5984 27.86C44.5384 27.86 45.1384 28.24 45.5984 28.82C46.2184 29.62 46.4984 30.88 46.4984 32.52C46.4984 34.16 46.2184 35.42 45.5984 36.22C45.1384 36.8 44.5384 37.18 43.5984 37.18C42.6584 37.18 42.0384 36.8 41.5984 36.22C40.9784 35.42 40.6784 34.16 40.6784 32.52ZM38.2984 32.52C38.2984 34.24 38.5784 35.86 39.4584 37.18C40.2984 38.44 41.6584 39.3 43.5984 39.3C45.5384 39.3 46.8784 38.44 47.7184 37.18C48.5984 35.86 48.8784 34.24 48.8784 32.52C48.8784 30.8 48.5984 29.18 47.7184 27.86C46.8784 26.6 45.5384 25.74 43.5984 25.74C41.6584 25.74 40.2984 26.6 39.4584 27.86C38.5784 29.18 38.2984 30.8 38.2984 32.52Z" fill="#43BFD6"/>
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" fill="none" viewBox="0 0 64 64"><rect width="64" height="64" fill="#D9F2F7" rx="32"/><path fill="#43BFD6" d="M24.3 29.26H21.86L19.34 36.22L16.76 29.26H14.2L18.16 39H20.48L24.3 29.26ZM30.5678 39V26.04H28.4878C28.2078 27.4 26.9278 28.44 25.0678 28.48V30.12H28.2078V39H30.5678ZM33.2111 37.5C33.2111 38.4 33.9311 39.12 34.8311 39.12C35.7311 39.12 36.4711 38.4 36.4711 37.5C36.4711 36.6 35.7311 35.86 34.8311 35.86C33.9311 35.86 33.2111 36.6 33.2111 37.5ZM40.6784 32.52C40.6784 30.88 40.9584 29.62 41.5984 28.82C42.0384 28.24 42.6584 27.86 43.5984 27.86C44.5384 27.86 45.1384 28.24 45.5984 28.82C46.2184 29.62 46.4984 30.88 46.4984 32.52C46.4984 34.16 46.2184 35.42 45.5984 36.22C45.1384 36.8 44.5384 37.18 43.5984 37.18C42.6584 37.18 42.0384 36.8 41.5984 36.22C40.9784 35.42 40.6784 34.16 40.6784 32.52ZM38.2984 32.52C38.2984 34.24 38.5784 35.86 39.4584 37.18C40.2984 38.44 41.6584 39.3 43.5984 39.3C45.5384 39.3 46.8784 38.44 47.7184 37.18C48.5984 35.86 48.8784 34.24 48.8784 32.52C48.8784 30.8 48.5984 29.18 47.7184 27.86C46.8784 26.6 45.5384 25.74 43.5984 25.74C41.6584 25.74 40.2984 26.6 39.4584 27.86C38.5784 29.18 38.2984 30.8 38.2984 32.52Z"/></svg>
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 24 KiB |
|
@ -0,0 +1,17 @@
|
|||
.head {
|
||||
font-family: 'Montserrat Alternates', sans-serif;
|
||||
color: #fff;
|
||||
/* text-shadow: 3px 2px 1px black; */
|
||||
margin-top: 100px;
|
||||
line-height: 1.15;
|
||||
font-size: 5.5rem;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
.head {
|
||||
font-size: 2.5rem;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 100px;
|
||||
}
|
||||
}
|