Skip to content

Instantly share code, notes, and snippets.

View polluterofminds's full-sized avatar

Justin Hunter polluterofminds

View GitHub Profile
@polluterofminds
polluterofminds / media.js
Last active April 7, 2022 13:00
Members Only Step 8
import { getSession } from "next-auth/react"
const API_ENDPOINT = 'https://managed.mypinata.cloud/api/v1'
const IDENTIFIER = '3d5468b3-f0ae-4a16-b726-6f09d009723b'
export default async function handler(req, res) {
const session = await getSession({ req })
if(req.method === "POST") {
try {
if(!session) {
return res.status(401).send("Not signed in");
@polluterofminds
polluterofminds / gallery.js
Created April 5, 2022 18:07
Members Only Step 7
@polluterofminds
polluterofminds / [...nextauth].js
Last active April 5, 2022 17:25
Members Only Step 6
const validateNFTOwnership = async (address) => {
try {
const { abi } = require("../../../helpers/erc721.js");
const contractAddress = '0x_NFT_CONTRACT_ADDRESS_HERE'
const provider = await new ethers.providers.JsonRpcProvider(process.env.ALCHEMY_ENDPOINT);
const contract = await new ethers.Contract( contractAddress , abi() , provider );
const balance = await contract.balanceOf(address);
if(balance.toString() !== "0") {
return true;
}
@polluterofminds
polluterofminds / [...nexauth].js
Last active April 5, 2022 17:30
Members Only Step 5
async authorize(credentials) {
try {
const siwe = new SiweMessage(JSON.parse(credentials?.message || "{}"))
const domain = process.env.DOMAIN
if (siwe.domain !== domain) {
return null
}
if (siwe.nonce !== (await getCsrfToken({ req }))) {
return null
@polluterofminds
polluterofminds / index.js
Last active April 5, 2022 18:04
Members Only Step Four
import Head from "next/head";
import { getCsrfToken, signIn, useSession } from 'next-auth/react'
import { SiweMessage } from 'siwe'
import { useAccount, useConnect, useNetwork, useSignMessage } from 'wagmi';
import { useRouter } from "next/router";
import { useEffect } from "react";
export default function Home() {
const router = useRouter();
const [{ data: connectData }, connect] = useConnect()
@polluterofminds
polluterofminds / [...nextauth].js
Created April 5, 2022 13:59
Members Only Step Three
import NextAuth from "next-auth"
import CredentialsProvider from "next-auth/providers/credentials"
import { getCsrfToken } from "next-auth/react"
import { SiweMessage } from "siwe"
export default async function auth(req, res) {
const providers = [
CredentialsProvider({
name: "Ethereum",
credentials: {
@polluterofminds
polluterofminds / _app.js
Last active April 5, 2022 14:08
Members Only Step Two
import { SessionProvider } from "next-auth/react"
import "../styles/globals.css"
import { WagmiProvider } from "wagmi"
export default function App({ Component, pageProps }) {
return (
<WagmiProvider autoConnect>
<SessionProvider session={pageProps.session} refetchInterval={0}>
<Component {...pageProps} />
</SessionProvider>
@polluterofminds
polluterofminds / index.js
Created April 5, 2022 13:38
Members Only Step One
import Head from "next/head";
export default function Home() {
return (
<div>
<Head>
<title>Members Only Photos</title>
<meta name="description" content="An NFT Powered Members Only Photo App" />
<link rel="icon" href="/favicon.ico" />
</Head>
@polluterofminds
polluterofminds / metadate_generator.js
Created February 1, 2022 18:15
metadata_generator.js
const fs = require('fs');
const imageDir = fs.readdirSync("./Pinnies");
imageDir.forEach(img => {
const metadata = {
name: `Pinnie ${img.split(".")[0]}`,
description: "A Pinnie in the Limited Pinata Family Collection",
image: `ipfs://FOLDER_CID/${img.split(".")[0]}.png`,
attributes: []
}
fs.writeFileSync(`./metadata/${img.split(".")[0]}`, JSON.stringify(metadata))
@polluterofminds
polluterofminds / tokenURI.js
Created January 13, 2022 16:10
Get Token URI with Hardhat
const hre = require("hardhat");
async function main() {
try {
const Contract = await hre.ethers.getContractFactory("AvalancheNFTDrop");
const contract = await Contract.attach(
"YOUR CONTRACT ADDRESS" // The deployed contract address
);
const uri = await contract.tokenURI(1);