Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wallet auth #81

Open
wants to merge 7 commits into
base: member-list-ui
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23,215 changes: 16,017 additions & 7,198 deletions package-lock.json

Large diffs are not rendered by default.

95 changes: 95 additions & 0 deletions packages/ui/components/auth.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import { AppConfig, UserSession, showConnect } from "@stacks/connect";
// import { Storage } from '@stacks/storage';
import { StacksMainnet, StacksTestnet } from "@stacks/network";
import {
callReadOnlyFunction,
cvToJSON,
standardPrincipalCV,
} from "@stacks/transactions";

// Initialize Gaia hub permissions for the user
const appConfig = new AppConfig(["store_write", "publish_data"]);

// Set this to true if you want to use Mainnet
// Using a boolean helps to switch the entire application to mainnet
// or testnet with only changing a single value
const isNetworkMainnet = true;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be an environment variable.

Copy link
Author

@suleman-mahmood suleman-mahmood Sep 1, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following the docs here (https://nextjs.org/docs/basic-features/environment-variables).
Making .env.development or .env files isn't working and environment variables aren't loaded up.
Spent an hour trying to make them to work but no progress :(
Dunno, what am I doing wrong

I have added the environment variable files and their usage in the commit. So maybe you can look into what am I doing wrong :x

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you create .env.local in packages/ui?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I have created all types of .env files in packages/ui and have logged the object process.env in the console and it appears to be empty. The environment variable doesn't seem to get loaded :/


export const userSession = new UserSession({ appConfig });
// export const storage = new Storage({ userSession });
suleman-mahmood marked this conversation as resolved.
Show resolved Hide resolved

// Return the network type object for the current network in use
export function networkType() {
if (isNetworkMainnet) return new StacksMainnet();
else return new StacksTestnet();
}

export function getMyStxAddress(): string {
if (isNetworkMainnet) return getUserData().profile.stxAddress.mainnet;
else return getUserData().profile.stxAddress.testnet;
}

export function getNetworkName(): string {
if (isNetworkMainnet) return "mainnet";
else return "testnet";
}

export function authenticate(): void {
showConnect({
appDetails: {
name: "daoOS",
// TODO: add daoOS logo over here
icon: "../public/favicon.ico",
},
redirectTo: "/",
onFinish: () => {
// TODO: Enter miami vice's contract address
const contractAddress: string = "SP98329831323123";
// TODO: Enter miami vice's contract name
const contractName: string = "miami-vice-v1";

const functionName: string = "is-dao-member";
const stxAddress: string = getMyStxAddress();
const principalArg = standardPrincipalCV(stxAddress);

const options = {
contractAddress,
contractName,
functionName,
functionArgs: [principalArg],
network: networkType(),
senderAddress: stxAddress,
};

callReadOnlyFunction(options)
suleman-mahmood marked this conversation as resolved.
Show resolved Hide resolved
.then((clarityValue) => {
const jsonValue = cvToJSON(clarityValue);

// TODO: check that the right type is compared
if (jsonValue.type === "(response bool)") {
// TODO: console log and check whether the right argument is used as boolean
const isMember: boolean = jsonValue.value["is-member"].value;

if (isMember) {
// Allow access to the miami dashboard
// TODO: add redirect to miami dashboard
window.location.replace(window.location.origin + "/");
} else {
// Deny access
// TODO: add redirect to register page
window.location.replace(window.location.origin + "/register");
}
}
})
.catch((error) => {
// TODO: any error handling such as the contract or the function doesn't exist
console.log(error.message);
});
},
userSession: userSession,
});
}

export function getUserData() {
suleman-mahmood marked this conversation as resolved.
Show resolved Hide resolved
return userSession.loadUserData();
}
Loading