diff --git a/src/main/java/com/jamesquinley/Asecure/electronicMailHandler.java b/src/main/java/com/jamesquinley/Asecure/electronicMailHandler.java index c4bac97..dd2254c 100644 --- a/src/main/java/com/jamesquinley/Asecure/electronicMailHandler.java +++ b/src/main/java/com/jamesquinley/Asecure/electronicMailHandler.java @@ -134,7 +134,49 @@ public class electronicMailHandler { e.printStackTrace(); System.err.println("Was Not Sent Because Of An Error."); } - } private static class SMTPAuthenticator extends + + } + public static void otkMigrate (String receiverEmail, String User) { + //get date for email + Date date = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy"); + String Date = formatter.format(date); + //get time for sign in time + Date dt = new Date(); + SimpleDateFormat dateFormat; + dateFormat = new SimpleDateFormat("kk:mm:ss"); + + Properties props = new Properties(); + props.put("mail.smtp.host", emailSMTPserver); + props.put("mail.smtp.socketFactory.port", emailSMTPPort); + props.put("mail.smtp.socketFactory.class", + "javax.net.ssl.SSLSocketFactory"); + props.put("mail.smtp.auth", "true"); + props.put("mail.smtp.port", emailSMTPPort); + + try { + Authenticator auth = new SMTPAuthenticator(); + Session session = Session.getInstance(props, auth); + Message message = new MimeMessage(session); + message.setFrom(new InternetAddress(senderEmailId)); + message.setRecipients(Message.RecipientType.TO, + InternetAddress.parse(receiverEmail)); + message.setSubject("Obsidian Core Account Notice"); + message.setText("The migration process has been completed, and the key is no longer valid.\n" + + "You will not receive a migration popup on login unless the account service changes hashes again.\n" + + "Welcome back to your account, and have a great day!\n" + + "\n\n\n\n\n" + + " This email is automated, sent to the owner of the account (" + User + ")." + " Please don't reply to this email."); + + Transport.send(message); + System.out.println("Alert Sent"); + } catch (Exception e) { + e.printStackTrace(); + System.err.println("Was Not Sent Because Of An Error."); + } + + } + private static class SMTPAuthenticator extends javax.mail.Authenticator { public PasswordAuthentication getPasswordAuthentication() { diff --git a/src/main/java/com/jamesquinley/Asecure/secureCalls.java b/src/main/java/com/jamesquinley/Asecure/secureCalls.java index cb829b8..e454160 100644 --- a/src/main/java/com/jamesquinley/Asecure/secureCalls.java +++ b/src/main/java/com/jamesquinley/Asecure/secureCalls.java @@ -26,4 +26,13 @@ public class secureCalls { }; runnable.run(); } + public static void accountMigrationComplete (String email, String user) + { + final Runnable runnable = new Runnable() { + public void run() { + electronicMailHandler.otkMigrate(email, user); + } + }; + runnable.run(); + } } diff --git a/src/main/java/com/jamesquinley/DelegationServices/delegationServices.java b/src/main/java/com/jamesquinley/DelegationServices/delegationServices.java index 511c4b4..4c974c5 100644 --- a/src/main/java/com/jamesquinley/DelegationServices/delegationServices.java +++ b/src/main/java/com/jamesquinley/DelegationServices/delegationServices.java @@ -15,6 +15,7 @@ import org.bson.Document; import java.util.Random; import java.util.UUID; +import static com.jamesquinley.Asecure.secureCalls.accountMigrationComplete; import static com.mongodb.client.model.Filters.eq; import static java.util.concurrent.TimeUnit.SECONDS; @@ -161,7 +162,7 @@ public class delegationServices { System.out.println("Delegation Has Started"); - if (requesttype == 0 || requesttype == 1 || requesttype == 2 || requesttype == 3 || requesttype == 4 || requesttype == 5 || requesttype == 6 || requesttype == 7 || requesttype == 8 || requesttype == 9 || requesttype == 10 || requesttype == 11 || requesttype == 12 || requesttype == 20 || requesttype == 21 || requesttype == 41 || requesttype == 18 || requesttype == 47 || requesttype == 48) { + if (requesttype == 0 || requesttype == 1 || requesttype == 2 || requesttype == 3 || requesttype == 4 || requesttype == 5 || requesttype == 6 || requesttype == 7 || requesttype == 8 || requesttype == 9 || requesttype == 10 || requesttype == 11 || requesttype == 12 || requesttype == 20 || requesttype == 21 || requesttype == 41 || requesttype == 18 || requesttype == 47 || requesttype == 48 || requesttype == 54 || requesttype == 57) { if (requesttype == 47) { System.out.println("Self Updater download Request"); BasicDBObject searchQuery = new BasicDBObject(); @@ -522,7 +523,7 @@ public class delegationServices { } else { - System.out.println("RS1"); + System.out.println("RS14"); if (Password.equals(password)) { System.out.println("R3c"); Token = (int) accountServer.get("Token"); @@ -620,31 +621,160 @@ public class delegationServices { if (requesttype == 54) { System.out.println("Verifying OTK"); String userKey = (String) Lrequest.get("otk"); + String userName = (String) Lrequest.get("recoverUser"); + String serverUserName; + userKey = userKey.toUpperCase(); + System.out.println(userKey); Document accountServer; try { accountServer = accountS.find(eq("tempKey", userKey)).first(); + serverUserName = (String) accountServer.get("User"); if (accountServer.get("Status").equals(true)) { + if (userName.equalsIgnoreCase(serverUserName)) + { + System.out.println("This key is correct."); + BasicDBObject searchQuery = new BasicDBObject(); + searchQuery.append("clientid", ClientID); + BasicDBObject updateQuery = new BasicDBObject(); + BasicDBObject updateQuery1 = new BasicDBObject(); + updateQuery.append("$set", + new BasicDBObject().append("type",55)); + updateQuery1.append("$set", + new BasicDBObject().append("status", true)); + dCollection.updateOne(searchQuery, updateQuery); + dCollection.updateOne(searchQuery, updateQuery1); + //delegationTimer.trigger(); + delegationTimer.DeleteTargetRequest(ClientID); + } + else + { + System.out.println("This key is incorrect"); + BasicDBObject searchQuery = new BasicDBObject(); + searchQuery.append("clientid", ClientID); + + BasicDBObject updateQuery = new BasicDBObject(); + BasicDBObject updateQuery1 = new BasicDBObject(); + updateQuery.append("$set", + new BasicDBObject().append("type",56)); + updateQuery1.append("$set", + new BasicDBObject().append("status", true)); + dCollection.updateOne(searchQuery, updateQuery); + dCollection.updateOne(searchQuery, updateQuery1); + //delegationTimer.trigger(); + delegationTimer.DeleteTargetRequest(ClientID); + } } } catch (Exception ERC) { + System.out.println("This key is incorrect." + ERC); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", - new BasicDBObject().append("type", 9)); + new BasicDBObject().append("type",56)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); - //delegationTimer.trigger(); delegationTimer.DeleteTargetRequest(ClientID); } } + if (requesttype == 57) + { + System.out.println("Verifying email with account tied to OTK"); + try { + String userKey = (String) Lrequest.get("otk"); + String requestedPassword = (String) Lrequest.get("paw"); + String email = (String) Lrequest.get("email"); + String serverEmail; + userKey = userKey.toUpperCase(); + Document accountServer; + accountServer = accountS.find(eq("tempKey", userKey)).first(); + serverEmail = (String) accountServer.get("Email"); + String userName = (String) accountServer.get("User"); + String serverKey = (String) accountServer.get("tempKey"); + System.out.println("Requested Password Hash: " + requestedPassword); + System.out.println("Email Stored On Server: " + serverEmail); + System.out.println("Email from client: " + email); + System.out.println("otk stored on server: " + serverKey); + System.out.println("otk from client: " + userKey); + if (email.equalsIgnoreCase(serverEmail) && userKey.equals(serverKey)) { + System.out.println("All Matching, lets go!"); + BasicDBObject searchQuery = new BasicDBObject(); + BasicDBObject searchQuery1 = new BasicDBObject(); + searchQuery.append("Email", serverEmail); + searchQuery1.append("clientid", ClientID); + System.out.println("Send indexes are ready."); + BasicDBObject updateQuery = new BasicDBObject(); + BasicDBObject updateQuery1 = new BasicDBObject(); + BasicDBObject updateQuery2 = new BasicDBObject(); + BasicDBObject updateQuery3 = new BasicDBObject(); + System.out.println("Objects are ready."); + updateQuery.append("$set", + new BasicDBObject().append("Password",requestedPassword)); + updateQuery1.append("$unset", + new BasicDBObject().append("tempKey", "")); + updateQuery2.append("$set", + new BasicDBObject().append("Version","2")); + updateQuery3.append("$set", + new BasicDBObject().append("keyStatus",false)); + System.out.println("Objects set"); + accountS.updateOne(searchQuery, updateQuery); + accountS.updateOne(searchQuery, updateQuery1); + accountS.updateOne(searchQuery, updateQuery2); + accountS.updateOne(searchQuery, updateQuery3); + System.out.println("Objects send"); + BasicDBObject closeRequestType = new BasicDBObject(); + BasicDBObject finalizeRequest = new BasicDBObject(); + System.out.println("Objects close init"); + closeRequestType.append("$set", + new BasicDBObject().append("type",58)); + finalizeRequest.append("$set", + new BasicDBObject().append("status", true)); + dCollection.updateOne(searchQuery1, closeRequestType); + dCollection.updateOne(searchQuery1, finalizeRequest); + System.out.println("Objects close send"); + delegationTimer.DeleteTargetRequest(ClientID); + System.out.println("request finished correctly"); + accountMigrationComplete(serverEmail, userName); + } + else + { + System.out.println("request denied"); + BasicDBObject searchQuery = new BasicDBObject(); + searchQuery.append("clientid", ClientID); + + BasicDBObject updateQuery = new BasicDBObject(); + BasicDBObject updateQuery1 = new BasicDBObject(); + updateQuery.append("$set", + new BasicDBObject().append("type",59)); + updateQuery1.append("$set", + new BasicDBObject().append("status", true)); + dCollection.updateOne(searchQuery, updateQuery); + dCollection.updateOne(searchQuery, updateQuery1); + delegationTimer.DeleteTargetRequest(ClientID); + } + } catch (Exception ex) { + System.out.println("Unable to reset password, making that known." + ex); + BasicDBObject searchQuery = new BasicDBObject(); + searchQuery.append("clientid", ClientID); + + BasicDBObject updateQuery = new BasicDBObject(); + BasicDBObject updateQuery1 = new BasicDBObject(); + updateQuery.append("$set", + new BasicDBObject().append("type",59)); + updateQuery1.append("$set", + new BasicDBObject().append("status", true)); + dCollection.updateOne(searchQuery, updateQuery); + dCollection.updateOne(searchQuery, updateQuery1); + delegationTimer.DeleteTargetRequest(ClientID); + } + } if (requesttype == 3) { System.out.println("Login Request (TKN)"); int CTOKEN = (int) Lrequest.get("Token"); diff --git a/src/main/java/com/jamesquinley/DelegationServices/status.java b/src/main/java/com/jamesquinley/DelegationServices/status.java index e7baafb..a3f26d7 100644 --- a/src/main/java/com/jamesquinley/DelegationServices/status.java +++ b/src/main/java/com/jamesquinley/DelegationServices/status.java @@ -2,4 +2,5 @@ package com.jamesquinley.DelegationServices; public class status { public static boolean betaServer = false; + //Beta server has been discontinued, the database that the server depended on has been shut down. }