-
Notifications
You must be signed in to change notification settings - Fork 0
/
myFtpServer.js
130 lines (100 loc) · 4.35 KB
/
myFtpServer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
const net = require('net')
const fs = require('fs')
const path = require('path')
if (process.argv.length !=3){
return console.log('usage: node myFtpServer.js <port>')
}
else{
const port = process.argv[2]
const server = net.createServer((socket) => {
let userDir
let user //utilisateur actuel
let users = JSON.parse(fs.readFileSync('connect.json')) //lire le fichier se connect.json pour le convertir en tableau
let code = '150' //code pour utilisateur
socket.write(code)//envoie du code au client
socket.on('data', (data) => { //Lorsque le serveur recois les donnees du client
const [directive, parameter] = data.toString().split(' ')
switch(directive) {
case 'LIST' :
if(code != '120'){ //si identifiant non connecté
code = '332'
socket.write(code)
}
else if(parameter) {
code = '409'
socket.write(`${code}~$(directive)`)
code='120'
}
else{
code = '150'//code pour la deconnexion
socket.write(code)
}
break;
case 'PASSWORD' :
if (userConnected ===0){
socket.write('Vous devez etre connecter pour avoir accés a cette commande !')
}
else if(userConnected=== 1){
socket.write(__dirname);
}
break;
case 'RETR';
if(userConnected === 0){
socket.write('Vous devez etre connecter pour avoir accés a cette commande !')
}
else if(userConnected === 0) {
rocket.write(__dirname);
}
break;
case 'CWD' :
if (code !='120'){
code ='332'
socket.write(code)
}
else if(data.toString().split(' ').length !=2){
code= '409'
socket.write(`${code}~{directive}`);
code ='120'
}
break;
case 'CWD' :
if (code !='120'){
code ='332'
socket.write(code)
}
else if(data.toString().split(' ').length !=2){
code= '409'
socket.write(`${code}~{directive}`);
code ='120'
}
break;
case 'USER' :
if (code !='120'){
code ='332'
socket.write(code)
code ='230'
}
else if(data.toString().split(' ').length >2){
code= '332'
socket.write(`${code}~{directive}`);
code ='120'
}
break;
case 'HELP' :
socket.write('USER <username>; check if the user exist\nPASS <password>; authenticate the user with a password\n'+
'LIST: list the current directory of the server\nCWD <directory>: change the current directory of the server\n'+
'RETR <filename>: transfer a copy of the file FILE from the server to the client\n'+
'STOR <filename>: transfer a copy of the file FILE from the client to the server\n'+
'PWD: display the name of the current directory of the server\n'+
'HELP: send helpful information to the client')
break;
case 'QUIT':
socket.write('You have been disconnected.')
socket.emit("end")
break;
}
})
})
server.listen(port, () => {
console.log(`Server started at port ${port}`)
})