package com.jamesquinley.DelegationServices; import com.mongodb.BasicDBObject; import com.mongodb.ConnectionString; import com.mongodb.MongoClientSettings; import com.mongodb.MongoCommandException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; import static com.mongodb.client.model.Filters.eq; import static java.util.concurrent.TimeUnit.SECONDS; public class delegationServices { static ConnectionString scReadconnectionString = new ConnectionString("mongodb+srv://serverClient:ej2ookJGgpV6JyFS@accountdelegation.n06hb.mongodb.net/DelegationRequest?retryWrites=true&w=majority"); static MongoClientSettings scReadsettings = MongoClientSettings.builder() .applyConnectionString(scReadconnectionString) .applyToSocketSettings(builder -> builder.connectTimeout(5, SECONDS) .readTimeout(6, SECONDS)) .build(); static MongoClient dClient = MongoClients.create(scReadsettings); static MongoDatabase dClientDatabase = dClient.getDatabase("DelegationRequest"); static MongoCollection dCollection = dClientDatabase.getCollection("accountRequest"); static ConnectionString AccountCon = new ConnectionString("mongodb+srv://DelegationServerClient:UNxldb8abSJkWscG@account.ufgrh.mongodb.net/account?retryWrites=true&w=majority"); static MongoClientSettings AccountSettings = MongoClientSettings.builder() .applyConnectionString(AccountCon) .applyToSocketSettings(builder -> builder.connectTimeout(5, SECONDS) .readTimeout(6, SECONDS)) .build(); static MongoClient accountGetClient = MongoClients.create(AccountSettings); static MongoDatabase accountDatabase = accountGetClient.getDatabase("account"); static MongoCollection accountS = accountDatabase.getCollection("UserPass"); //still need to config public static void delegationProcesser() { Document Lrequest = dCollection.find(eq("status", false)).first(); int ClientID = 0; int requesttype = (int) Lrequest.get("type"); System.out.println("Got Type, Getting Doc ID"); //TODO Get this working, it broke and it wont get OBJ id 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) { if (requesttype == 7) { System.out.println("An Excluded Request (7MAL) Has Been Detected, Ignoring"); } try { ClientID = (int) Lrequest.get("clientid"); } catch (Exception exrp) { System.out.println("Failed To Get Client ID"); } if (requesttype == 0) { int CTOKEN = (int) Lrequest.get("Token"); System.out.println("Sync Request (Read)"); Document accountServer; String Password; int Token; String Fname; String Path; String UserName; String Email; try { accountServer = accountS.find(eq("Token", CTOKEN)).first(); Token = (int) accountServer.get("Token"); if (accountServer.get("Status").equals(true)) { if (Token == CTOKEN) { Token = (int) accountServer.get("Token"); Password = (String) accountServer.get("Password"); Fname = (String) accountServer.get("FName"); Path = (String) accountServer.get("Path"); Email = (String) accountServer.get("Email"); UserName = (String) accountServer.get("User"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); BasicDBObject updateQuery2 = new BasicDBObject(); BasicDBObject updateQuery3 = new BasicDBObject(); BasicDBObject updateQuery4 = new BasicDBObject(); BasicDBObject updateQuery5 = new BasicDBObject(); BasicDBObject updateQuery6 = new BasicDBObject(); BasicDBObject updateQuery7 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 12)); updateQuery1.append("$set", new BasicDBObject().append("Token", Token)); updateQuery2.append("$set", new BasicDBObject().append("Fname", Fname)); updateQuery3.append("$set", new BasicDBObject().append("Path", Path)); updateQuery4.append("$set", new BasicDBObject().append("User", UserName)); updateQuery5.append("$set", new BasicDBObject().append("Password", Password)); updateQuery7.append("$set", new BasicDBObject().append("Email", Email)); updateQuery6.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); dCollection.updateOne(searchQuery, updateQuery2); dCollection.updateOne(searchQuery, updateQuery3); dCollection.updateOne(searchQuery, updateQuery4); dCollection.updateOne(searchQuery, updateQuery5); dCollection.updateOne(searchQuery, updateQuery6); dCollection.updateOne(searchQuery, updateQuery7); } else { System.out.println("Sync Failure"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 9)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); //delegationTimer.trigger(); } } else { System.out.println("Banned Account"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 11)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); } } catch(MongoCommandException ERC){ System.out.println("Malformed Request"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 7)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); //delegationTimer.trigger(); } } //sync read request //TODO This has issues, and won't get past line 171. Working on a fix for that. if (requesttype == 1) { System.out.println("Sync Request (Write)"); int CTOKEN = (int) Lrequest.get("Token"); Document accountServer; String Password; int Token; String Fname; String Path; String UserName; String Email; try { accountServer = accountS.find(eq("Token", CTOKEN)).first(); Token = (int) accountServer.get("Token"); if (accountServer.get("Status").equals(true)) { System.out.println("Account is OK"); if (Token == CTOKEN) { System.out.println("Logged In"); Token = (int) Lrequest.get("Token"); Password = (String) Lrequest.get("Password"); Fname = (String) Lrequest.get("FName"); Path = (String) Lrequest.get("path"); Email = (String) Lrequest.get("Email"); UserName = (String) Lrequest.get("User"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("Token", Token); BasicDBObject SqS = new BasicDBObject(); SqS.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); BasicDBObject updateQuery2 = new BasicDBObject(); BasicDBObject updateQuery3 = new BasicDBObject(); BasicDBObject updateQuery4 = new BasicDBObject(); BasicDBObject updateQuery5 = new BasicDBObject(); BasicDBObject updateQuery6 = new BasicDBObject(); BasicDBObject updateQuery7 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 12)); updateQuery1.append("$set", new BasicDBObject().append("Token", Token)); updateQuery2.append("$set", new BasicDBObject().append("FName", Fname)); updateQuery3.append("$set", new BasicDBObject().append("Path", Path)); updateQuery4.append("$set", new BasicDBObject().append("User", UserName)); updateQuery7.append("$set", new BasicDBObject().append("Email", Email)); updateQuery6.append("$set", new BasicDBObject().append("status", true)); // System.out.println("Sending Info To Forwarding Server"); dCollection.updateOne(SqS, updateQuery); dCollection.updateOne(SqS, updateQuery6); accountS.updateOne(searchQuery, updateQuery1); accountS.updateOne(searchQuery, updateQuery2); accountS.updateOne(searchQuery, updateQuery3); accountS.updateOne(searchQuery, updateQuery4); accountS.updateOne(searchQuery, updateQuery5); accountS.updateOne(searchQuery, updateQuery7); System.out.println("Updated Account"); //delegationTimer.trigger(); } else { System.out.println("Sync Failure"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 9)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); //delegationTimer.trigger(); } } else { System.out.println("Banned Account"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 11)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); } } catch(MongoCommandException ERC){ System.out.println("Malformed Request"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 7)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); //delegationTimer.trigger(); } } if (requesttype == 2) { System.out.println("Login Request (USR&PASS)"); String username = (String) Lrequest.get("User"); String password = (String) Lrequest.get("Password"); Document accountServer; String Password; int Token; String Fname; String Path; String UserName; String Email; try { accountServer = accountS.find(eq("User", username)).first(); Password = (String) accountServer.get("Password"); if (accountServer.get("Status").equals(true)) { if (Password.equals(password)) { Token = (int) accountServer.get("Token"); Fname = (String) accountServer.get("FName"); Path = (String) accountServer.get("Path"); Email = (String) accountServer.get("Email"); UserName = (String) accountServer.get("User"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); BasicDBObject updateQuery2 = new BasicDBObject(); BasicDBObject updateQuery3 = new BasicDBObject(); BasicDBObject updateQuery4 = new BasicDBObject(); BasicDBObject updateQuery5 = new BasicDBObject(); BasicDBObject updateQuery6 = new BasicDBObject(); BasicDBObject updateQuery7 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 8)); updateQuery1.append("$set", new BasicDBObject().append("Token", Token)); updateQuery2.append("$set", new BasicDBObject().append("Fname", Fname)); updateQuery3.append("$set", new BasicDBObject().append("Path", Path)); updateQuery4.append("$set", new BasicDBObject().append("User", UserName)); updateQuery5.append("$set", new BasicDBObject().append("Password", Password)); updateQuery7.append("$set", new BasicDBObject().append("Email", Email)); updateQuery6.append("$set", new BasicDBObject().append("status", true)); // System.out.println("Sending Info To Forwarding Server"); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); dCollection.updateOne(searchQuery, updateQuery2); dCollection.updateOne(searchQuery, updateQuery3); dCollection.updateOne(searchQuery, updateQuery4); dCollection.updateOne(searchQuery, updateQuery5); dCollection.updateOne(searchQuery, updateQuery6); dCollection.updateOne(searchQuery, updateQuery7); //delegationTimer.trigger(); } else { BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 7)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); //delegationTimer.trigger(); } } else { System.out.println("Banned Account"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 11)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); } } catch (Exception 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)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); //delegationTimer.trigger(); } } if (requesttype == 3) { System.out.println("Login Request (TKN)"); int CTOKEN = (int) Lrequest.get("Token"); // Document TResolve = dCollection.find(eq("type", 3)).first(); Document accountServer; int TKN; String Password; String Fname; String Path; String UserName; String Email; try { accountServer = accountS.find(eq("Token", CTOKEN)).first(); TKN = (int) accountServer.get("Token"); if (accountServer.get("Status").equals(true)) { if (TKN == CTOKEN) { TKN = (int) accountServer.get("Token"); Password = (String) accountServer.get("Password"); Fname = (String) accountServer.get("FName"); Path = (String) accountServer.get("Path"); Email = (String) accountServer.get("Email"); UserName = (String) accountServer.get("User"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery2 = new BasicDBObject(); BasicDBObject updateQuery3 = new BasicDBObject(); BasicDBObject updateQuery4 = new BasicDBObject(); BasicDBObject updateQuery5 = new BasicDBObject(); BasicDBObject updateQuery6 = new BasicDBObject(); BasicDBObject updateQuery7 = new BasicDBObject(); BasicDBObject updateQuery8 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 8)); updateQuery2.append("$set", new BasicDBObject().append("Fname", Fname)); updateQuery3.append("$set", new BasicDBObject().append("Path", Path)); updateQuery4.append("$set", new BasicDBObject().append("User", UserName)); updateQuery5.append("$set", new BasicDBObject().append("Password", Password)); updateQuery7.append("$set", new BasicDBObject().append("Email", Email)); updateQuery6.append("$set", new BasicDBObject().append("status", true)); updateQuery8.append("$set", new BasicDBObject().append("Token", TKN)); System.out.println("Sending Info To Forwarding Server"); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery2); dCollection.updateOne(searchQuery, updateQuery3); dCollection.updateOne(searchQuery, updateQuery4); dCollection.updateOne(searchQuery, updateQuery5); dCollection.updateOne(searchQuery, updateQuery6); dCollection.updateOne(searchQuery, updateQuery8); dCollection.updateOne(searchQuery, updateQuery7); //delegationTimer.trigger(); } else { System.out.println("Login Failure"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 9)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); //delegationTimer.trigger(); } } else { System.out.println("Banned Account"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 11)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); } } catch (MongoCommandException ERC) { System.out.println("Malformed Request"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("clientid", ClientID); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 7)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); dCollection.updateOne(searchQuery, updateQuery); dCollection.updateOne(searchQuery, updateQuery1); //delegationTimer.trigger(); } } } else { System.out.println("Malformed Request, Non Recoverable"); BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("type", requesttype); BasicDBObject updateQuery = new BasicDBObject(); BasicDBObject updateQuery1 = new BasicDBObject(); updateQuery.append("$set", new BasicDBObject().append("type", 7)); updateQuery1.append("$set", new BasicDBObject().append("status", true)); Lrequest.append("status",true); dCollection.updateOne(searchQuery, updateQuery1); dCollection.updateOne(searchQuery, updateQuery); } //above is finding one request and starting wheels //delegationTimer.trigger(); delegate(); } public static void Clear () { BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("status", true); BasicDBObject searchQuery1 = new BasicDBObject(); searchQuery1.append("status", false); dCollection.deleteMany(searchQuery); dCollection.deleteMany(searchQuery1); System.out.println("Flushed Server"); delegationTimer.DeleteAllRequests(); } public static void delegate () { userAuthetication(); } public static void userAuthetication (){ try { delegationProcesser(); } catch (Exception exr) { System.out.println("No Pending Authentication"); delegationTimer.trigger(); } } }