Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main.java.pl.mn.model;
- import com.sun.org.apache.xalan.internal.xsltc.compiler.util.BooleanType;
- import java.sql.*;
- /**
- * Klasa odpowiedzialna za komunikację między serwerem a bazą danych SQL
- * Created by mn on 22.01.16.
- */
- public class SQLHandler {
- private Connection c;
- private Statement stmnt;
- /**
- * Metoda dodająca użytkownika do bazy danych
- * @param username nazwa użytkownika
- * @param password hasło użytkownika
- */
- public void insertUser(String username, String password){
- double salt = Math.random();
- String query = "INSERT INTO `users`(`username`, `password`, `salt`) " +
- "VALUES ('"+username+"',PASSWORD(CONCAT(PASSWORD('"+password+"'),"+salt+")),"+salt+")";
- try {
- stmnt.executeUpdate(query);
- } catch (SQLException e) {
- }
- }
- /**
- * Metoda przypisująca użytkownika do grupy w tabeli usergroups
- * @param username nazwa użytkownika
- * @param groupname nazwa grupy
- */
- public void assignToGroup(String username, String groupname){
- String query = "INSERT INTO `usergroup`(`user_id`,`group_id`) " +
- "VALUES ((SELECT `id` FROM `users` WHERE `username`='"+username+"')," +
- "(SELECT `id` FROM `groups` WHERE `group_name`='"+groupname+"'))";
- try {
- stmnt.executeUpdate(query);
- } catch (SQLException e) {
- }
- }
- /**
- * Metoda dodająca informacje o pliku do bazy danych
- * @param filename nazwa pliku
- * @param username nazwa użytkownika dodającego plik
- */
- public void insertFileInfo(String filename, String username){
- String query = "INSERT INTO `files`(`filename`, `owner_id`, `group_id`, `user_read`, `user_write`, `group_read`, `group_write`) " +
- "VALUES ("+filename+",(SELECT `id` FROM `users` WHERE `username`='"+username+"')," +
- "(SELECT `group_id` FROM `usergroup` WHERE `user_id`=(SELECT `id` FROM `users` WHERE `username`='"+username+"'))" +
- ",TRUE,TRUE,TRUE,FALSE)";
- try {
- stmnt.executeUpdate(query);
- } catch (SQLException e) {
- }
- }
- /**
- * Metoda sprawdzająca czy hasło jest poprawne
- * @param username nazwa użytkownika
- * @param password sprawdzane hasło
- * @return true, jeżeli hasło jest poprawne; false w przeciwnym wypadku
- */
- public boolean verifyPassword(String username, String password){
- String query = "SELECT `password`=PASSWORD(CONCAT(PASSWORD('"+password+"'),`salt`)) FROM `users` WHERE `username`='"+username+"'";
- try {
- ResultSet rs = stmnt.executeQuery(query);
- if(rs.next()){
- return true;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return false;
- }
- /**
- * Metoda sprawdza sprawdza czy użytkownik ma prawo do odczytu pliku
- * @param username Nazwa użytkownika proszącego o dostęp
- * @param filename Nazwa pliku na serwerze
- * @return true, jeżeli ma prawa do jego odczytu, false w przeciwnym wypadku
- */
- public boolean verifyReadPermission(String username, String filename){
- String query = "SELECT `group_read` OR (`user_read` AND `owner_id`=(SELECT `id` FROM `users` WHERE `username`='"+username+"')) " +
- "FROM `files` AS `f` WHERE `f`.`filename`='"+filename+"' " +
- "AND `f`.`group_id` IN (SELECT `group_id` FROM `usergroup` WHERE `user_id`=(SELECT `id` FROM `users` WHERE `username`='"+username+"'))";
- try {
- ResultSet rs = stmnt.executeQuery(query);
- while(rs.next()){
- Boolean group = rs.getBoolean("group_read");
- Boolean user = rs.getBoolean("user_read");
- if (user || group){
- return true;
- }
- return true;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return false;
- }
- public SQLHandler(){
- try {
- c= DriverManager.getConnection("jdbc:mysql://mysql.agh.edu.pl/mnitek", "mnitek", "ThPcohoc");
- stmnt = c.createStatement();
- initDataBase();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- private void initDataBase(){
- String usersQuery = "CREATE TABLE IF NOT EXISTS `users` ("+
- "`id` INT(1) NOT NULL AUTO_INCREMENT,"+
- "`username` VARCHAR(10) NOT NULL,"+
- "`password` VARCHAR(45) NOT NULL,"+
- "`salt` VARCHAR(20) NOT NULL,"+
- " PRIMARY KEY (`id`),"+
- " UNIQUE KEY `username` (`username`)"+
- ") ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=3";
- String groupsQuery = "CREATE TABLE IF NOT EXISTS `groups` ("+
- "`id` INT(1) NOT NULL AUTO_INCREMENT,"+
- "`group_name` VARCHAR(10) NOT NULL,"+
- "PRIMARY KEY (`id`),"+
- "UNIQUE KEY `group_name` (`group_name`)"+
- ")ENGINE=MyISAM DEFAULT CHARSET = latin2 AUTO_INCREMENT=2";
- String usergroupQuery = "CREATE TABLE IF NOT EXISTS `usergroup` ("+
- "`user_id` INT(11) NOT NULL,"+
- "`group_id` INT(11) NOT NULL"+
- ") ENGINE=MyISAM DEFAULT CHARSET=latin2;";
- String filesQuery = "CREATE TABLE IF NOT EXISTS `files` ("+
- "`id` INT(11) NOT NULL AUTO_INCREMENT,"+
- "`filename` VARCHAR(50) NOT NULL,"+
- "`owner_id` INT(11) NOT NULL,"+
- "`group_id` INT(11) NOT NULL,"+
- "`user_read` tinyint(1) NOT NULL DEFAULT '1',"+
- "`user_write` tinyint(1) NOT NULL DEFAULT '1',"+
- "`group_read` tinyint(1) NOT NULL DEFAULT '1',"+
- "`group_write` tinyint(1) NOT NULL DEFAULT '1',"+
- "PRIMARY KEY (`id`)," +
- "UNIQUE KEY `filename` (`filename`)" +
- ")ENGINE=MyISAM DEFAULT CHARSET = latin2 AUTO_INCREMENT=2";
- String adminGroupQuery = "INSERT IGNORE INTO `groups` (`id`, `group_name`) VALUES (1, 'admin')";
- try {
- stmnt.executeUpdate(usersQuery);
- stmnt.executeUpdate(groupsQuery);
- stmnt.executeUpdate(usergroupQuery);
- stmnt.executeUpdate(filesQuery);
- stmnt.executeUpdate(adminGroupQuery);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement