ServerRMI.java
Go to the documentation of this file.
1 package p2pserver;
2 
4 import java.rmi.*;
5 import java.rmi.registry.LocateRegistry;
6 import java.rmi.registry.Registry;
7 import java.rmi.server.UnicastRemoteObject;
8 import java.util.ArrayList;
9 
10 
11 /*
12  * Classe che implementa funzioni RMI, ovvero tutte le funzioni
13  * accessibili da client remoti 'autorizzati' cioe' a conoscenza
14  * dell'indirizzo IP, del protocollo (RMI), del nome assegnato
15  * dal programmatore (ServerRMI) e dalla porta.
16  *
17  * Si precisa che tutte le funzioni ad eccezione di serverOn(),
18  * che altro non fa che ritornare un valore true se il server e' attivo,
19  * sono protette da un meccanismo di autenticazione user,password che
20  * impedisce l'accesso a dati potenzialmente sensibili da parte di
21  * client non autorizzati espressamente dal server.
22  * @author HTTPS://WWW.PIETRIS.NET
23  * @see p2pclient.RMIFuncConstructor
24  * @see p2pclient.clientRMI
25  */
26 public class ServerRMI extends UnicastRemoteObject implements RMIFuncConstructor {
27 
28  static ServerRMI obj;
29  boolean dbg = true;
30  private String user;
31  private int id_user;
32 
37  protected ServerRMI() throws RemoteException {
38  super();
39 
40  }
41 
47  public void disconnectClient(String usr, String pswd)throws java.rmi.RemoteException {
48  ArrayList u = p2pgui.ServerFrame.IDB.getUserList("WHERE username='"+usr+"'");
49  String id_client = ((ArrayList)u.get(0)).get(0).toString();
50 
51  p2pgui.ServerFrame.IDB.delFileListBy(null, null, null, id_client, null, null, null, null, null, null);
52  p2pgui.ServerFrame.IDB.delUserListBy(id_client, null, usr, pswd);
53 
54  if(dbg) p2putility.Util.logServer("Information: Client "+id_client+" is disconnect.");
55 
56  }
57 
62  public boolean serverOn()throws java.rmi.RemoteException{
63  if(p2pgui.ServerFrame.IDB.isOpen()){
64  if(dbg) p2putility.Util.logServer("SERVER SIDE: ON! ");
65  return true;
66  }
67 
68  if(dbg) p2putility.Util.logServer("SERVER SIDE: DOWN! ");
69  return false;
70  }
71 
78  public boolean clientAlive(String usr, String pswd)throws java.rmi.RemoteException{
79  if(!isReg(usr,pswd)){
80  if(dbg) p2putility.Util.logServer("Client "+usr+" is not connected.");
81  return false;
82  }
83 
84  if(dbg) p2putility.Util.logServer("Client "+usr+" is connected.");
85  return true;
86  }
87 
99  @SuppressWarnings("static-access")
100  public String getAccessStringDelete(String usr, String pswd, String owner_file, String id_file)throws java.rmi.RemoteException{
101  if(!isReg(usr,pswd)){
102  if(dbg) p2putility.Util.logServer("Client "+usr+" not registred on server.");
103  return "-2";
104  }
105  String access = "";
106 
107  //ArrayList del file selezionato
108  ArrayList l = p2pgui.ServerFrame.IDB.getFileList("WHERE ckey ="+id_file);
109  //ArrayList dell'owner del file selezionato
110  ArrayList i = p2pgui.ServerFrame.IDB.getUserList("WHERE id ="+owner_file);
111  if(i.size()==1 && l.size()==1){
112  ArrayList ll = (ArrayList) l.get(0);
113  ArrayList ii = (ArrayList) i.get(0);
114 
115  int state = Integer.parseInt(ll.get(8).toString());
116  int file_right = Integer.parseInt(ll.get(7).toString());
117  if(file_right<2){
118  p2putility.Util.logServer("Access deny: no rights to delete the file");
119  return "-4";
120  }
121  else {
122  if(state==2){
123  p2putility.Util.logServer("Impossible to delete a file in writing.");
124  return "-3";
125  }
126  else
127  if(state==1){
128  p2putility.Util.logServer("Impossible to delete a file in reading.");
129  return "-5";
130  }
131 
132  String ip_owner = ii.get(1).toString();
133  String pswd_owner = ii.get(3).toString();
134  String user_owner = ii.get(2).toString();
135 
136  access = pswd + pswd_owner + id_file;
137  String v = p2putility.Util.hash_sha(access);
138  access = ip_owner + ";" + v;
139 
140  //Thread per inviare i dati d'accesso al client che possiede il file
142  TRA.dbg = true;
143  TRA.k = usr + id_file;
144  TRA.v = v;
145  TRA.ip = ip_owner;
146  TRA.funct = "addAuthUser";
149 
150  Thread t = new Thread(TRA);
151  t.start();
152  }
153  }
154 
155  return access;
156  }
157 
169  @SuppressWarnings("static-access")
170  public String getAccessStringRead(String usr, String pswd, String owner_file, String id_file)throws java.rmi.RemoteException{
171  if(!isReg(usr,pswd)){
172  if(dbg) p2putility.Util.logServer("Client "+usr+" not registred on server.");
173  return "-2";
174  }
175  String access = "";
176 
177  String ip_owner = "";
178  String user_owner = "";
179  String pswd_owner= "";
180 
181  //ArrayList del file selezionato
182  ArrayList l = p2pgui.ServerFrame.IDB.getFileList("WHERE ckey ="+id_file);
183  //ArrayList dell'owner del file selezionato
184  ArrayList i = p2pgui.ServerFrame.IDB.getUserList("WHERE id ="+owner_file);
185  if(i.size()==1 && l.size()==1){
186  ArrayList ll = (ArrayList) l.get(0);
187  ArrayList ii = (ArrayList) i.get(0);
188 
189  int state = Integer.parseInt(ll.get(8).toString());
190  int file_right = Integer.parseInt(ll.get(7).toString());
191  if(file_right<1){
192  if(dbg) p2putility.Util.logServer("Access deny: no rights to open the file");
193  return "-4";
194  }
195  else {
196  if(state==2){
197  if(dbg) p2putility.Util.logServer("Impossible to open a file in writing.");
198  return "-3";
199  }
200 
201  ip_owner = ii.get(1).toString();
202  pswd_owner = ii.get(3).toString();
203 
204  user_owner = ii.get(2).toString();
205 
206  access = pswd + pswd_owner + id_file;
207  String v = p2putility.Util.hash_sha(access);
208  access = ip_owner + ";" + v;
209 
210  //Thread per inviare i dati d'accesso al client che possiede il file
212  TRA.dbg = true;
213  TRA.v = v;
214  TRA.k = usr + id_file;
215  TRA.ip = ip_owner;
216  TRA.funct = "addAuthUser";
219 
220  Thread t = new Thread(TRA);
221  t.start();
222  }
223  }
224 
225  return access;
226  }
227 
239  @SuppressWarnings("static-access")
240  public String getAccessStringUpload(String usr, String pswd, String id_client2, String id_file)throws java.rmi.RemoteException{
241  if(!isReg(usr,pswd)){
242  if(dbg) p2putility.Util.logServer("Client "+usr+" not registred on server.");
243  return "-2";
244  }
245  String access = "";
246 
247  String ip_client2 = "";
248  String user_client2 = "";
249  String pswd_client2= "";
250 
251  //ArrayList dell'owner del file selezionato
252  ArrayList i = p2pgui.ServerFrame.IDB.getUserList("WHERE id ="+id_client2);
253 
254  if(i.size()!=1)
255  return "";
256 
257  ArrayList ii = (ArrayList) i.get(0);
258 
259  ip_client2 = ii.get(1).toString();
260  pswd_client2 = ii.get(3).toString();
261  user_client2 = ii.get(2).toString();
262 
263  access = pswd + pswd_client2 + id_file;
264  access= p2putility.Util.hash_sha(access);
265 
266  //Thread per inviare i dati d'accesso al client che possiede il file
268  TRA.dbg = true;
269  TRA.k = usr + p2putility.Util.hash_sha(id_file);
270  TRA.v = access;
271  TRA.ip = ip_client2;
272  TRA.funct = "addAuthUser";
275 
276  Thread t = new Thread(TRA);
277  t.start();
278 
279  return access;
280  }
281 
291  public ArrayList getList(String usr, String pswd, String where) throws java.rmi.RemoteException{
292  if(!isReg(usr,pswd)){
293  if(dbg) p2putility.Util.logServer("Client "+usr+" not registred on server.");
294  return null;
295  }
296 
297  try{
298  return p2pgui.ServerFrame.IDB.getFileList(where);
299  }
300  catch(Exception xe){return null;}
301  }
302 
312  public ArrayList getUserList(String usr, String pswd, String where) throws java.rmi.RemoteException{
313  if(!isReg(usr,pswd)){
314  if(dbg) p2putility.Util.logServer("Client "+usr+" not registred on server.");
315  return null;
316  }
317 
318  try{
319  return p2pgui.ServerFrame.IDB.getUserList(where);
320  }
321  catch(Exception xe){
322  if(dbg) p2putility.Util.logServer("getUserList error: "+xe);
323  return null;
324  }
325  }
326 
338  public boolean removeFile(String usr, String pswd, String name, String path, int state) throws java.rmi.RemoteException{
339  if(!isReg(usr,pswd)){
340  if(dbg) p2putility.Util.logServer("Client "+usr+" not registred on server.");
341  return false;
342  }
343 
344  int stato = 0;
345  return p2pgui.ServerFrame.IDB.delFileListBy(null, name, path, null, null, null, null, null, ""+stato , null);
346 
347  }
348 
357  public boolean sendList(String usr, String pswd, ArrayList list) throws java.rmi.RemoteException{
358  if(!isReg(usr,pswd)){
359  if(dbg) p2putility.Util.logServer("Client "+usr+" not registred on server.");
360  return false;
361  }
362 
363  if(dbg) p2putility.Util.logServer("Server: "+list);
364  //Query x trovare numero di file nella tabella x assegare id del file
365  long next = p2pgui.ServerFrame.IDB.nextCkeyFileList();
366  for(int i=0; i<list.size(); i++){
367  ((ArrayList) list.get(i)).remove(0);
368  ((ArrayList) list.get(i)).add(0, next+i);
369  }
370  p2pgui.ServerFrame.IDB.putFileList(list);
371  return true;
372  }
373 
374 
383  @SuppressWarnings("static-access")
384  public int registerToServer(String usr, String pswd) throws java.rmi.RemoteException{
385  user = usr;
386  if(!p2putility.Util.login(user, pswd)){
387  if(dbg) p2putility.Util.logServer("ID or PASSWORD not valid");
388  return -1;
389  }
390 
391  int nextid = 0;
392  String ip = "";
393  try{
394  ip = obj.getClientHost();
395  }
396  catch(Exception x){}
397  ArrayList tmp2 = new ArrayList();
398  ArrayList tmp1 = new ArrayList();
399 
400  nextid = p2pgui.ServerFrame.IDB.nextUserID();
401 
402  tmp1.add(nextid);
403  tmp1.add(ip);
404  tmp1.add(user);
405  tmp1.add(pswd);
406  tmp2.add(0,tmp1);
407 
408  if(dbg) p2putility.Util.logServer("Arraylist da inserire: "+tmp2);
409  boolean result = p2pgui.ServerFrame.IDB.putUserList(tmp2);
410  if(dbg) p2putility.Util.logServer("Risultato della query di inserimento "+result);
411 
412  if (!result)
413  return -1;
414 
415  ArrayList id = p2pgui.ServerFrame.IDB.getUserList("WHERE username='"+user+"'");
416  ArrayList idd = (ArrayList)id.get(0);
417  id_user = Integer.parseInt(idd.get(0).toString());
418 
419  return id_user;
420  }
421 
422 
423 
428  public static void main(String[] args) {
429 
430  try {
431  obj = new ServerRMI();
432  Registry registry;
433 
435  registry = LocateRegistry.createRegistry(p2putility.Config.r_rmiregport());
436  else
437  registry = LocateRegistry.getRegistry();
438 
439  registry.rebind("ServerRMI",obj);
440  Naming.rebind("ServerRMI", obj);
441 
442 
443  p2putility.Util.logServer("ServerRMI e' stato registrato");
444  } catch (Exception e) {
445  p2putility.Util.logServer("ServerRMI err: " + e);
446  }
447 
448  }
449 
456  private boolean isReg(String u, String p){
457  try
458  {
459  ArrayList l = p2pgui.ServerFrame.IDB.getUserList("WHERE username='"+u+"'");
460  p2putility.Util.logServer("isReg("+u+","+p+") = "+l);
461  if(l.size()>0)
462  if(((ArrayList)l.get(0)).get(3).toString().compareTo(p)==0)
463  return true;
464  }
465  catch(Exception xe){
466  if(dbg) p2putility.Util.logServer("isReg error:"+xe);
467  return false;
468  }
469  return false;
470  }
471 
472 }
static p2pserver.InquireDB IDB
Classe che permette la configurazione di tutto il programma in base alle specifiche esigenze dell&#39;ute...
Definition: Config.java:14
Classe che implementa metodi vari di utilita&#39; generale.
Definition: Util.java:14
boolean sendList(String usr, String pswd, ArrayList list)
Invia una lista di file al DBMS del server.
Definition: ServerRMI.java:357
Classe che implementa il servizio Server.
String getAccessStringDelete(String usr, String pswd, String owner_file, String id_file)
Costruisce la stringa di autenticazione che permette ad un client registrato di cancellare un file (s...
Definition: ServerRMI.java:100
String getAccessStringRead(String usr, String pswd, String owner_file, String id_file)
Costruisce la stringa di autenticazione che permette ad un client registrato di scaricare un file (se...
Definition: ServerRMI.java:170
Classe che richiede una connessione RMI per la funzione addAuthUser.
static void main(String[] args)
Main.
Definition: ServerRMI.java:428
String getAccessStringUpload(String usr, String pswd, String id_client2, String id_file)
Costruisce la stringa di autenticazione che permette ad un client registrato di inviare un file (se i...
Definition: ServerRMI.java:240
boolean removeFile(String usr, String pswd, String name, String path, int state)
Cancella i file presenti sul DBMS del server, in base alla clausola WHERE specificabile in input...
Definition: ServerRMI.java:338
int registerToServer(String usr, String pswd)
Inserisce un utente autorizzato (si veda p2putility.Util.login) nella lista utenti del DBMS del serve...
Definition: ServerRMI.java:384
void disconnectClient(String usr, String pswd)
Disconnette un client dal server cancellandolo dal DBMS.
Definition: ServerRMI.java:47
static int r_rmiregport()
Permette la lettura della varibile relativa in modo sicuro.
Definition: Config.java:335
ServerRMI()
Costruttore.
Definition: ServerRMI.java:37
ArrayList getUserList(String usr, String pswd, String where)
Restituisce la lista degli utenti presenti sul DBMS del server, in base alla clausola WHERE specifica...
Definition: ServerRMI.java:312
boolean serverOn()
Ritorna true se il server e&#39; attivo.
Definition: ServerRMI.java:62
boolean isReg(String u, String p)
Funzione privata che verifica se un utente e&#39; registrato nel DBMS del server.
Definition: ServerRMI.java:456
ArrayList getList(String usr, String pswd, String where)
Restituisce la lista dei file presenti sul DBMS del server, in base alla clausola WHERE specificabile...
Definition: ServerRMI.java:291
static String hash_sha(String text)
Converte una stringa nel corrispondente HASH SHA-1 in forma esadecimale.
Definition: Util.java:89
static boolean r_clientOpen()
Permette la lettura della varibile relativa in modo sicuro.
Definition: Config.java:410
boolean clientAlive(String usr, String pswd)
Verifica se il client e&#39; connesso al server, cioe&#39; se e&#39; presente nel DBMS.
Definition: ServerRMI.java:78
static boolean login(String u, String p)
Verifica se un utente fa parte della lista di utenti registrati (Il programma P2PFileSystem non si oc...
Definition: Util.java:31
static void logServer(String data)
Scrive i dati in input sul file di log del Server (se questo esiste valido)
Definition: Util.java:110
Classe implementata a Thread che permette di lanciare un processo di ClientRmiAuthorization autonomo...