1
- import { Fragment , useState } from "react" ;
1
+ import { Fragment , useState , useEffect , useCallback , useEffec } from "react" ;
2
+ import { Link , useParams } from 'react-router-dom'
2
3
import "./FileUpload.css" ;
3
- import { Link } from "react-router-dom" ;
4
4
import { create } from "ipfs-http-client" ;
5
- import Card from "../components/Card" ;
5
+ import Web3 from 'web3'
6
+ import { lock_addr , lock_abi } from "../wallet/config" ;
6
7
import LoadingSpinner from "./LoadingSpinner" ;
7
8
import download from "../images/download.png" ;
8
9
const Cryptr = require ( "cryptr" ) ;
9
10
const client = create ( "https://ipfs.infura.io:5001/api/v0" ) ;
10
11
11
- const FileUpload = ( props ) => {
12
- const [ name , setName ] = useState ( "" ) ;
13
- const [ filename , setFilename ] = useState ( "Choose a File" ) ;
14
- const [ file , setFile ] = useState ( "" ) ;
15
- const [ password , setPassword ] = useState ( "" ) ;
16
- const [ cpassword , setCPassword ] = useState ( "" ) ;
17
- const [ link , setLink ] = useState ( "" ) ;
18
- const [ message , setMessage ] = useState ( "" ) ;
19
- const [ uploading , setUploading ] = useState ( false ) ;
20
- const [ modal , setModal ] = useState ( false ) ;
21
-
22
- const onChange = ( e ) => {
23
- setFile ( e . target . files [ 0 ] ) ;
24
- setFilename ( e . target . files [ 0 ] . name ) ;
25
- } ;
26
12
27
- const formSubmission = async ( e ) => {
28
- e . preventDefault ( ) ;
29
- if ( ! password === cpassword && name && file ) {
30
- console . log ( "not met" ) ;
31
- return ;
32
- }
33
- setUploading ( true ) ;
34
- const cryptr = new Cryptr ( cpassword ) ;
35
- try {
36
- const options = {
37
- wrapWithDirectory : true ,
38
- } ;
39
- const files = [ { path : filename , content : file } ] ;
40
- const added = await client . add ( files , options ) ;
41
- const url = `https://ipfs.infura.io/ipfs/${ added . cid . toString ( ) } /${ filename } ` ;
42
- console . log ( url ) ;
43
- const encryptedString = cryptr . encrypt ( url ) ;
44
- setLink ( encryptedString ) ;
45
- setMessage ( "File Uploaded" ) ;
46
- } catch ( error ) {
47
- console . log ( "Error uploading file: " , error ) ;
48
- setMessage ( error ) ;
49
- }
50
- setTimeout ( ( ) => setMessage ( "" ) , 10000 ) ;
51
- setName ( "" ) ;
52
- setCPassword ( "" ) ;
53
- setPassword ( "" ) ;
54
- setFilename ( "Choose a file" ) ;
55
- setFile ( "" ) ;
56
- setUploading ( false ) ;
57
- setModal ( true ) ;
58
- } ;
59
13
60
- const nameChangeHandler = ( event ) => {
61
- setName ( event . target . value ) ;
62
- } ;
14
+ var requestOptions = {
15
+ method : 'GET' ,
16
+ redirect : 'follow'
17
+ } ;
18
+ const FileUpload = ( props ) => {
19
+ const [ name , setName ] = useState ( props . id )
20
+ const [ password , setPassword ] = useState ( '' )
21
+ const [ uploading , setUploading ] = useState ( false ) ;
22
+ const [ error , setError ] = useState ( null ) ;
23
+ const [ account , setAccount ] = useState ( '' ) ;
24
+ const [ lockk , setLockk ] = useState ( { } )
25
+ const openLink = ( url ) => window . open ( url , 'download' ) ?. focus ( ) ;
26
+ const loadBlockhainData = async ( ) => {
27
+ const web3 = new Web3 ( Web3 . givenProvider || "https://localhost:7545" ) ;
28
+ const accounts = await web3 . eth . getAccounts ( )
29
+ setAccount ( accounts [ 0 ] )
30
+ console . log ( account )
31
+ const lock = new web3 . eth . Contract ( lock_abi , lock_addr )
32
+ setLockk ( lock )
33
+
34
+ } ;
35
+ useEffect ( ( ) => {
36
+ loadBlockhainData ( ) ;
37
+ } , [ account ] )
38
+
39
+ const formSubmission = async ( e ) => {
40
+ e . preventDefault ( ) ;
41
+ setUploading ( true ) ;
63
42
64
- const passwordChangeHandler = ( event ) => {
65
- setPassword ( event . target . value ) ;
66
- } ;
43
+ if ( ! name || ! password ) { return }
44
+ try {
45
+ const cryptr = new Cryptr ( password ) ;
46
+ console . log ( 'started' )
47
+ const link = await lockk . methods . getlink ( name - 1 ) . call ( )
48
+ console . log ( link )
49
+ const decryptedString = cryptr . decrypt ( link ) ;
50
+ console . log ( decryptedString )
51
+ const response = await fetch ( `${ decryptedString } ` , requestOptions ) ;
52
+ if ( ! response . ok ) {
53
+ throw new Error ( 'Something went wrong!' ) ;
54
+ }
55
+ const data = await response . url ;
56
+ console . log ( data )
57
+ openLink ( data )
58
+ } catch ( error ) {
59
+ setError ( error ) ;
60
+ }
61
+ setUploading ( false )
62
+
63
+
64
+ } ;
67
65
68
- const cpasswordChangeHandler = ( event ) => {
69
- setCPassword ( event . target . value ) ;
70
- } ;
71
- const modalChangeHandler = ( ) => {
72
- setModal ( false ) ;
73
- } ;
66
+ const nameChangeHandler = ( event ) => {
67
+ setName ( event . target . value ) ;
68
+ } ;
69
+
70
+ const passwordChangeHandler = ( event ) => {
71
+ setPassword ( event . target . value ) ;
72
+ } ;
74
73
75
74
return (
76
75
< Fragment >
77
76
{ uploading && < LoadingSpinner /> }
78
- { modal && < Card onClose = { modalChangeHandler } link = { link } /> }
79
77
< div className = "updown" >
80
78
< form onSubmit = { formSubmission } className = "form-down" >
81
79
< div class = "row" >
@@ -85,7 +83,7 @@ const FileUpload = (props) => {
85
83
type = "text"
86
84
id = "fname"
87
85
name = "fname"
88
- placeholder = "File Name "
86
+ placeholder = "File ID "
89
87
required = "true"
90
88
onChange = { nameChangeHandler }
91
89
value = { name }
@@ -112,7 +110,7 @@ const FileUpload = (props) => {
112
110
type = "submit"
113
111
value = "Download"
114
112
class = "btn"
115
- disabled = { ! password === cpassword && name }
113
+ disabled = { ! password && ! name }
116
114
> </ input >
117
115
< Link to = "/" class = "btn" >
118
116
Cancel
@@ -121,23 +119,8 @@ const FileUpload = (props) => {
121
119
</ form >
122
120
< div className = "img-con" >
123
121
< img src = { download } alt = "upload" className = "down-img" />
124
- < div class = "row" >
125
- < div class = "input_field" >
126
- { /* <h1>Upload Files</h1> */ }
127
- </ div >
128
- < div className = "custom-file" >
129
- < input
130
- type = "file"
131
- className = "custom-file-input"
132
- id = "customFile"
133
- onChange = { onChange }
134
- />
135
- { /* <label for="customFile">{filename}</label> */ }
136
- </ div >
137
- </ div >
138
122
</ div >
139
123
</ div >
140
- < p > { message } </ p >
141
124
</ Fragment >
142
125
) ;
143
126
} ;
0 commit comments