Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions db/user.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Ruben;2;1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75
Andres;1;1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,8 @@ public class Constants {
static final int DEFAULTOPTION = 0;
static final int BUY = 1;
static final int EXIT = 2;
static final String MENU="Press 1 for buy \nPress 2 for exit ";
static final int REGISTER_USER = 3;
static final int LOGIN_USER = 4;
static final String MENU="Press 1 for buy \nPress 2 for exit\nPress 3 for register user\nPress 4 for login user";
static final String USERERROR = "You need to be logged in to perform this action";
}
74 changes: 64 additions & 10 deletions ejercicios3/src/main/java/com/curso/ejercicios3/Rome.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,31 @@
package com.curso.ejercicios3;

import static com.curso.ejercicios3.Constants.*;

import java.io.IOException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.InputMismatchException;

import javax.security.auth.login.LoginException;

/**
* main class
* @author dpadilla
*/
public class Rome {

private GregorianCalendar baseTime;
private boolean exit;
private UserInterface ui;
private Casher casher;
private HashSet<GregorianCalendar> daysTaken;

private User user = null;
private UserDB userDB = new UserDB();
private UserAuth userAuth = new UserAuth(userDB);
private HashMap<Ticket, User> tickets = new HashMap<>();

public Rome() {
exit = false;
ui = new UserInterface();
Expand All @@ -34,6 +42,12 @@ public Rome() {
* method that start the program
*/
public void run() {
try {
userDB.loadDB();
} catch (IOException e) {
System.out.println("Error reading the file");
}

//inith a base time, where millisecods, seconds, minutes and hours dont
//matter. I will only use, year, month and day, other data will be 0
int numTickets = 0;
Expand All @@ -49,16 +63,57 @@ public void run() {

switch (option) {
case BUY:
numTickets = ui.askNumberTicket();
casher.buyTickets(numTickets);
newTicket(numTickets);
if (user == null) {
System.out.println(USERERROR);
break;
}
else {
numTickets = ui.askNumberTicket();
casher.buyTickets(numTickets);
newTicket(numTickets);
break;
}

case REGISTER_USER:
try {
try {
user = userAuth.registerUser();
userDB.writeDB();
}
catch (IOException e) {
System.out.println("Error writing the file");
}
}
catch (LoginException e) {
e.printStackTrace();
}
break;
case EXIT:
exit = true;

case LOGIN_USER:
try {
user = userAuth.login();
}
catch (LoginException e) {
e.printStackTrace();
}
break;

case DEFAULTOPTION:
System.out.println(MENU);
break;

case EXIT:
exit = true;

try {
userDB.writeDB();
}
catch (IOException e) {
e.printStackTrace();
}
break;


default:
System.out.println(MENU);
}
Expand All @@ -77,7 +132,7 @@ private void newTicket(int numTickets) {
for (int i = 0; i < numTickets;) {
dateNumber = ui.askDate();//interface ask for date
ticketTime = editCalendar(dateNumber, ticketTime);

if (checkCalendar(ticketTime)) {//is the day avaliable?
ticketList.add(new Ticket((GregorianCalendar) ticketTime.clone()));
daysTaken.add((GregorianCalendar) ticketTime.clone());
Expand All @@ -90,6 +145,7 @@ private void newTicket(int numTickets) {

for (Ticket ticket : ticketList) {
System.out.println(ticket);
tickets.put(ticket, user);
}
}

Expand All @@ -115,7 +171,5 @@ private GregorianCalendar editCalendar(ArrayList<Integer> dateNumber, GregorianC
*/
private boolean checkCalendar(GregorianCalendar day) {
return !daysTaken.contains(day) && baseTime.before(day);

}

}
11 changes: 5 additions & 6 deletions ejercicios3/src/main/java/com/curso/ejercicios3/Ticket.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
* @author dpadilla
*/
public class Ticket {

private int price;
private static int totalId=0;
private int id;
Expand All @@ -36,9 +35,9 @@ public GregorianCalendar getDate() {
public String toString() {
return "Ticket{" + "price=" + price + ", id=" + id + ", date=" + date.getTime() + '}';
}





@Override
public int hashCode() {
return id;
}
}
47 changes: 47 additions & 0 deletions ejercicios3/src/main/java/com/curso/ejercicios3/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.curso.ejercicios3;

public class User {
// dni, name
private String dni;
private String name;
private String hashedPassword;


public User(String name, String dni, String hashedPassword){
this.name = name;
this.dni = dni;
this.hashedPassword=hashedPassword;
}

public String getDni() {
return dni;
}

public String getName() {
return name;
}
public String getHashedPassword() {
return hashedPassword;
}
public void setDni(String dni) {
this.dni = dni;
}

public void setName(String name) {
this.name = name;
}
public void setHashedPassword(String hashedPassword) {
this.hashedPassword = hashedPassword;
}

@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}

User o = (User) obj;
return o.getDni().equals(dni) && o.getName().equals(name);
}

}
80 changes: 80 additions & 0 deletions ejercicios3/src/main/java/com/curso/ejercicios3/UserAuth.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package com.curso.ejercicios3;

import java.util.Scanner;
import java.math.BigInteger;
import java.security.MessageDigest;

import javax.security.auth.login.LoginException;

public class UserAuth {
private UserDB userDB;
private Scanner scan = new Scanner(System.in);


public UserAuth(UserDB userDB) {
this.userDB = userDB;
}


public User login () throws LoginException {
System.out.println("What's your NIF?");
System.out.print("> ");
String dni = scan.nextLine();

System.out.println("Password for " + dni + ":");
System.out.print("> ");
String password = scan.nextLine();
String hashedPassword = getSHA512(password);

User user = null;

try {
user = userDB.login(dni, hashedPassword);
}
catch (LoginException e) {
throw new LoginException("Incorrect user or/and password");
}

return user;
}


public User registerUser() throws LoginException {
System.out.println("What's your name?");
System.out.print("> ");
String name = scan.nextLine();

System.out.println("What's your NIF?");
System.out.print("> ");
String dni = scan.nextLine();

System.out.println("Provide your password:");
System.out.print("> ");
String password = scan.nextLine();
String hashedPassword = getSHA512(password);

User user = new User(name, dni, hashedPassword);

if (!userDB.addUser(user)) {
throw new LoginException("User already exists in the database");
}

return user;
}


public String getSHA512(String input){

String toReturn = null;
try {
MessageDigest digest = MessageDigest.getInstance("SHA-512");
digest.reset();
digest.update(input.getBytes("utf8"));
toReturn = String.format("%0128x", new BigInteger(1, digest.digest()));
} catch (Exception e) {
e.printStackTrace();
}

return toReturn;
}
}
Loading