Beispiel #1
0
        /// <summary>
        /// Funzione per registrare un nuovo utente.
        /// </summary>
        /// <param name="nome">Nome utente</param>
        /// <param name="password">Password per l'utente (cleartext)</param>
        /// <param name="path_monitorato">Path Locale dell'utente che verra monitorato</param>
        static public User RegistraUtente(string nome, string password)
        {
            if (!NomeUtenteValido(nome))
            {
                throw new DatabaseException("Nome utente non va bene.", DatabaseErrorCode.FormatError);
            }
            if (!PasswordValida(password))
            {
                throw new DatabaseException("Password non va bene.", DatabaseErrorCode.FormatError);
            }
            password = TrasformaPassword(password);
            //provo a mettere il nuovo utente: se ricevo un'eccezione particolare il nome utente e duplicato
            DB_Table db = new DB_Table();

            string[][] parameters = new string[2][];
            parameters[0] = new string[2] {
                "@nome", nome
            };
            parameters[1] = new string[2] {
                "@password", password
            };
            try{
                db.ExecuteQuery(sql_insert_user, parameters);
            }
            catch (DatabaseException e) when(e.ErrorCode == DatabaseErrorCode.Constraint)
            {
                throw new DatabaseException("L'utente che si cerca di inserire esiste già.", DatabaseErrorCode.UserGiaEsistente);
            }

            return(new User(nome, password));
        }
Beispiel #2
0
        //Metodi Statici
        /// <summary>
        /// Distrugge gli snapshot di un file.
        /// </summary>
        /// <param name="nome_utente"></param>
        /// <param name="id_file"></param>
        static public void RimuoviSnapshotsDiFile(string nome_utente, int id_file)
        {
            DB_Table db  = new DB_Table();
            Log      l   = Log.getLog();
            string   sql = "SELECT nome_locale_s FROM snapshots WHERE id_file = @id_file;";

            string[][] parameters = new string[1][];
            string     local_file = "";
            string     local_path = Properties.ApplicationSettings.Default.base_path + Path.DirectorySeparatorChar + "users_files" + Path.DirectorySeparatorChar + nome_utente;

            parameters[0] = new string[2] {
                "@id_file", id_file.ToString()
            };
            db.ExecuteQuery(sql, parameters);
            foreach (int i in db.GetResults())
            {
                local_file = (string)db.ResultGetValue("nome_locale_s");
                try
                {
                    File.Delete(local_path + Path.DirectorySeparatorChar + local_file);
                }
                catch (Exception e)
                {
                    l.log("Errore nell'eliminare i file da disco. " + e.Message);
                    throw;
                }
            }
        }
        //Funzioni Statiche

        public static Snapshot creaNuovo(int id_file,
                                         DateTime timestamp   = new DateTime(),
                                         int dim              = 0,
                                         string sha_contenuto = "")
        {
            //Controllo che gli argomenti non abbiano caratteri strani
            Snapshot s = null;

            if (base_path == null)
            {
                base_path = Properties.ApplicationSettings.Default.base_path + Path.DirectorySeparatorChar + "users_files";
            }
            // Genero un nome casuale per il file in locale e controllo che non esista
            string nome_locale;

            do
            {
                nome_locale = Path.GetRandomFileName();
            } while (File.Exists(base_path + Path.DirectorySeparatorChar + nome_locale));
            // Creo il file (vuoto)
            FileStream f = File.Create(base_path + Path.DirectorySeparatorChar + nome_locale);

            // Memorizzo i file nel db, ottengo l'id e ritorno il nuovo snapshot
            string[][] parameters = new string[5][];
            parameters[0] = new string[2] {
                "@dim", dim.ToString()
            };
            parameters[1] = new string[2] {
                "@t_modifica", timestamp.ToString("u")
            };
            parameters[2] = new string[2] {
                "@sha_contenuto", sha_contenuto
            };
            parameters[3] = new string[2] {
                "@nome_locale_s", nome_locale
            };
            parameters[4] = new string[2] {
                "@id_file", id_file.ToString()
            };

            DB_Table db = new DB_Table();
            Log      l  = Log.getLog();

            db.ExecuteQuery(sql_insert_data, parameters);
            long id = db.getLastInsertedId();

            l.log("Id inserito: " + id);
            /*          Per qualche motivo questa cosa lancia una nullReferenceException, come se s non venisse creato*/
            s = new Snapshot(id_file, (int)id);
            s.cambioContenutoIniziato = true;
            s.__scrittura_contenuto   = f;
            s.posizione_scrittura     = 0;
            s.__sha_contenuto         = sha_contenuto;
            //return new Snapshot(nome_utente,(int)id);
            return(s);
        }
        public FileUtente nuovoFile(string nome_file, string path_relativo, DateTime t_creazione = new DateTime())
        {
            //Se non c'è spazio, cerco un capro espiatorio da buttare per far posto a quello nuovo,
            //Altrimenti lancio un'eccezione
            string[][] parameters = new string[1][];
            if (this.__list_ids_files.Count >= this.__max_file)
            {
                int id_da_sacrificare = -1;
                parameters[0] = new string[2] {
                    "@nome_utente", __nome_utente
                };
                this.ExecuteQuery(Properties.SQLquery.sqlCercaFileDaDistruggere, parameters);
                foreach (int i in this.GetResults())
                {
                    id_da_sacrificare = Int32.Parse(this.ResultGetValue("id").ToString());
                    break;
                }

                if (id_da_sacrificare >= 0)
                {
                    for (int i = 0; i < this.Length; i++)
                    {
                        if (this[i].Id == id_da_sacrificare)
                        {
                            this[i].Distruggi();
                        }
                    }
                }
                else
                {
                    this.l.log("Non c'è più posto per l'utente " + __nome_utente, Level.INFO);
                    throw new DatabaseException("Non è più possibile inserire nuovi file. Limite superato.", DatabaseErrorCode.LimiteFileSuperato);
                }
            }

            if (t_creazione == DateTime.MinValue)
            {
                t_creazione = DateTime.Now;
            }

            parameters    = new string[4][];
            parameters[0] = new string[2] {
                "@t_creazione", t_creazione.ToString("u")
            };
            parameters[1] = new string[2] {
                "@path_relativo_c", path_relativo
            };
            parameters[2] = new string[2] {
                "@nome_file_c", nome_file
            };
            parameters[3] = new string[2] {
                "@nome_utente", this.__nome_utente
            };
            DB_Table db = new DB_Table();
            Log      l  = Log.getLog();

            db.ExecuteQuery(Properties.SQLquery.sqlNuovoFile, parameters);
            long id = db.getLastInsertedId();

            FileUtente file = new FileUtente(this.__nome_utente, (int)id);

            this.__list_ids_files.Add(file.Id);
            this.__file_list[this.__list_ids_files.Count - 1] = file;
            return(file);
        }