juice-shop
42 строки · 1.9 Кб
1import { type Request, type Response } from 'express'
2import { HDNodeWallet } from 'ethers'
3import challengeUtils = require('../lib/challengeUtils')
4import * as utils from '../lib/utils'
5import { challenges } from '../data/datacache'
6
7module.exports.checkKeys = function checkKeys () {
8return (req: Request, res: Response) => {
9try {
10const mnemonic = 'purpose betray marriage blame crunch monitor spin slide donate sport lift clutch'
11const mnemonicWallet = HDNodeWallet.fromPhrase(mnemonic)
12const privateKey = mnemonicWallet.privateKey
13const publicKey = mnemonicWallet.publicKey
14const address = mnemonicWallet.address
15challengeUtils.solveIf(challenges.nftUnlockChallenge, () => {
16return req.body.privateKey === privateKey
17})
18if (req.body.privateKey === privateKey) {
19res.status(200).json({ success: true, message: 'Challenge successfully solved', status: challenges.nftUnlockChallenge })
20} else {
21if (req.body.privateKey === address) {
22res.status(401).json({ success: false, message: 'Looks like you entered the public address of my ethereum wallet!', status: challenges.nftUnlockChallenge })
23} else if (req.body.privateKey === publicKey) {
24res.status(401).json({ success: false, message: 'Looks like you entered the public key of my ethereum wallet!', status: challenges.nftUnlockChallenge })
25} else {
26res.status(401).json({ success: false, message: 'Looks like you entered a non-Ethereum private key to access me.', status: challenges.nftUnlockChallenge })
27}
28}
29} catch (error) {
30res.status(500).json(utils.getErrorMessage(error))
31}
32}
33}
34module.exports.nftUnlocked = function nftUnlocked () {
35return (req: Request, res: Response) => {
36try {
37res.status(200).json({ status: challenges.nftUnlockChallenge.solved })
38} catch (error) {
39res.status(500).json(utils.getErrorMessage(error))
40}
41}
42}
43