Guest User

Untitled

a guest
Dec 14th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.08 KB | None | 0 0
  1. /*
  2. * Program Development Start Date : 10/23/2018
  3. * Partnered Application Project
  4. * Problem :
  5. */
  6. package partneredapplication;
  7. // Main Utility
  8. import java.util.*;
  9. import java.util.ArrayList;
  10.  
  11. // XML Parsing Packages
  12. import javax.xml.parsers.DocumentBuilderFactory;
  13. import javax.xml.parsers.DocumentBuilder;
  14. import javax.xml.parsers.ParserConfigurationException;
  15. import javax.xml.transform.TransformerFactory;
  16. import javax.xml.transform.Transformer;
  17.  
  18. // File Handling Packages
  19. import java.io.IOException;
  20. import java.io.File;
  21. import java.io.FileReader;
  22. import javax.xml.transform.OutputKeys;
  23. import javax.xml.transform.TransformerConfigurationException;
  24. import javax.xml.transform.TransformerException;
  25. import javax.xml.transform.dom.DOMSource;
  26. import javax.xml.transform.stream.StreamResult;
  27.  
  28. // XML Handlers
  29. import org.w3c.dom.Document;
  30. import org.w3c.dom.Element;
  31. import org.w3c.dom.Text;
  32. import org.w3c.dom.Node;
  33. import org.w3c.dom.NodeList;
  34. import org.xml.sax.SAXException;
  35.  
  36. // Encryption Packages
  37. import java.io.IOException;
  38. import javax.crypto.KeyGenerator;
  39. import java.io.UnsupportedEncodingException;
  40. import java.security.InvalidKeyException;
  41. import java.security.NoSuchAlgorithmException;
  42. import java.security.spec.InvalidKeySpecException;
  43. import java.sql.Connection;
  44. import java.sql.DriverManager;
  45. import java.sql.PreparedStatement;
  46. import java.sql.ResultSet;
  47. import java.sql.SQLException;
  48. import java.sql.Statement;
  49. import javax.crypto.BadPaddingException;
  50. import javax.crypto.Cipher;
  51. import javax.crypto.IllegalBlockSizeException;
  52. import javax.crypto.NoSuchPaddingException;
  53. import javax.crypto.SecretKey;
  54. import javax.crypto.SecretKeyFactory;
  55. import javax.crypto.spec.DESKeySpec;
  56.  
  57. /**
  58. * Group Members
  59. * @author cs.evsnyder
  60. * @author cs.cwberg
  61. */
  62.  
  63. public class PartneredApplication {
  64.  
  65. public static String computerusername = System.getProperty("user.name");
  66. // Account Information Database
  67. public static ArrayList<String> StoredUsernames = new ArrayList<String>();
  68. public static ArrayList<String> StoredPins = new ArrayList<String>();
  69. public static ArrayList<String> StoredIds = new ArrayList<String>();
  70. public static ArrayList<SecretKey> StoredKeys = new ArrayList<SecretKey>();
  71. public static ArrayList<String> StoredActClasses = new ArrayList<String>();
  72. public static ArrayList<String> StoredActUsernames = new ArrayList<String>();
  73. public static ArrayList<String> StoredActPasswords = new ArrayList<String>();
  74. public static ArrayList<String> StoredActExtras = new ArrayList<String>();
  75. public static boolean accountFound = false;
  76.  
  77. // Main Method
  78. public static void main(String[] args) throws Exception {
  79. // Show Loading Status UI
  80. ServerConnect.displayGUI();
  81. try{
  82. Class.forName("com.mysql.jdbc.Driver").newInstance();
  83. String db_url = "jdbc:mysql://den1.mysql6.gear.host/csaver";
  84. String db_username = "csaver";
  85. String db_password = "Hi2T_Tb?fZV6";
  86. Connection con = DriverManager.getConnection(db_url, db_username, db_password);
  87. //Connection con = DriverManager.getConnection("jdbc:mysql://den1.mysql6.gear.host" + "usercsaver&password=Hi2T_Tb?fZV6&autoReconnect=true&failOverReadOnly=false&maxReconnects=10");
  88. String query = "SELECT * FROM accountdata";
  89. Statement st = con.createStatement();
  90. ResultSet rs = st.executeQuery(query);
  91.  
  92. while(rs.next()){
  93. String currentAccount = rs.getString("username");
  94. if(currentAccount.equals(computerusername)){
  95. accountFound = true;
  96. break;
  97. }
  98. }
  99.  
  100. if(accountFound){
  101. Thread.sleep(240);
  102. ServerConnect.hideGUI();
  103.  
  104. System.out.println("Account found, prompting PIN.");
  105. ExistingAccount.displayGUI();
  106. }
  107. else{
  108. Thread.sleep(240);
  109. ServerConnect.hideGUI();
  110. System.out.println("Account not found, prompting creation.");
  111. NewAccount.displayGUI();
  112. }
  113. con.close();
  114. }
  115. catch(ClassNotFoundException | IllegalAccessException | InstantiationException | InterruptedException | SQLException e){
  116. e.printStackTrace();
  117. }
  118. // Pull XML File from SQL Server and save locally.
  119.  
  120. // Load XML File and create local storage.
  121. try{
  122. // Instance a document-builder in order to read file.
  123. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  124. factory.setNamespaceAware(false);
  125. factory.setValidating(false);
  126. DocumentBuilder builder = factory.newDocumentBuilder();
  127.  
  128. File file = new File("src/partneredapplication/accountStorage.xml");
  129. Document document = builder.parse(file);
  130. Element accountStorage = document.getDocumentElement();
  131. NodeList accounts = accountStorage.getChildNodes();
  132. for(int i = 0, ii = 0, n = accounts.getLength(); i<n; i++){
  133. Node child = accounts.item(i);
  134. if(child.getNodeType() != Node.ELEMENT_NODE)
  135. continue;
  136. Element account = (Element)child;
  137. ii++;
  138.  
  139. // Add items / attributes to local storage.
  140. StoredIds.add(account.getAttribute("id"));
  141. StoredUsernames.add(getAccountData(findFirstNamedElement(child,"username")));
  142. StoredPins.add(getAccountData(findFirstNamedElement(child,"pin")));
  143.  
  144. }
  145.  
  146. } catch(IOException | ParserConfigurationException | SAXException e){
  147. e.printStackTrace();
  148. }
  149.  
  150. // Encryption Example
  151.  
  152. /*
  153. * SecretKey key = KeyGenerator.getInstance("DES").generateKey();
  154. * DesEncrypter encrypter = new DesEncrypter(key);
  155. * String encrypted = encrypter.encrypt("1h8f&n101");
  156. * String decrypted = encrypter.decrypt(encrypted);
  157. */
  158.  
  159. /*
  160. ServerConnect.hideGUI();
  161.  
  162. // Creates account if one is not created.
  163. String computerUsername = System.getProperty("user.name");
  164. boolean accountExists = verifyExistance(computerUsername);
  165.  
  166. // Prompt UI in both cases.
  167. if(accountExists){
  168. System.out.println("Account found, prompting PIN.");
  169. ExistingAccount.displayGUI();
  170. }
  171. else{
  172. System.out.println("Account not found, prompting creation.");
  173. NewAccount.displayGUI();
  174. }
  175. */
  176.  
  177. }
  178. //Hide previous UI
  179.  
  180.  
  181. public static void removeActEntry(String username, String actclass, String actusername, String actpassword, String actextras){
  182. String previousActExtras = StoredActExtras.get(returnIndex(username));
  183. String previousActUsernames = StoredActUsernames.get(returnIndex(username));
  184. String previousActPasswords = StoredActPasswords.get(returnIndex(username));
  185. String previousActClasses = StoredActClasses.get(returnIndex(username));
  186.  
  187. String editedActExtras = previousActExtras.replaceAll(actextras+"\n", "");
  188. String editedActUsernames = previousActUsernames.replaceAll(actusername+"\n", "");
  189. String editedActPasswords = previousActPasswords.replaceAll(actpassword+"\n", "");
  190. String editedActClasses = previousActClasses.replaceAll(actclass+"\n", "");
  191.  
  192. StoredActExtras.set(returnIndex(username), editedActExtras);
  193. StoredActClasses.set(returnIndex(username), editedActClasses);
  194. StoredActUsernames.set(returnIndex(username), editedActUsernames);
  195. StoredActPasswords.set(returnIndex(username), editedActPasswords);
  196. }
  197.  
  198. // Split compiled information into an array.
  199. public static String[] returnSplitInformation(String username, String aclass){
  200. if(aclass.equals("usernames")){
  201. String compiledData = StoredActUsernames.get(returnIndex(username));
  202. String[] splitData = compiledData.split("\n");
  203. return splitData;
  204. }
  205. if(aclass.equals("passwords")){
  206. String compiledData = StoredActPasswords.get(returnIndex(username));
  207. String[] splitData = compiledData.split("\n");
  208. return splitData;
  209. }
  210. if(aclass.equals("classes")){
  211. String compiledData = StoredActClasses.get(returnIndex(username));
  212. String[] splitData = compiledData.split("\n");
  213. return splitData;
  214. }
  215. if(aclass.equals("extras")){
  216. String compiledData = StoredActExtras.get(returnIndex(username));
  217. String[] splitData = compiledData.split("\n");
  218. return splitData;
  219. }
  220. return null;
  221. }
  222.  
  223. // Prerequisite Verification / 4-Digit Pin Code.
  224. public static boolean verifyCredentials(String username, String pin){
  225. for(int i=0; i<(StoredUsernames.size()); i++){
  226. if(username.equals((String)StoredUsernames.get(i))){
  227. if(((String)StoredPins.get(i)).equals(pin)){
  228. //System.out.println("PinCorrectCredentials");
  229. return true;
  230. }
  231. if(((String)StoredPins.get(i)).equals("NoPin")){
  232. //System.out.println("NoPinCorrectCredentials");
  233. return true;
  234. }
  235. else{
  236. System.out.println("Incorrect Pin.");
  237. return false;
  238. }
  239. }
  240. }
  241. System.out.println("Account does not exist, prompting account creation for "+username);
  242. return false;
  243. }
  244.  
  245. // Add account data entry.
  246. public static void addActEntry(String username, String actclass, String actusername, String actpassword, String actextras){
  247. if(StoredActExtras.get(returnIndex(username)).equals("")){
  248. StoredActExtras.set(returnIndex(username), actextras);
  249. StoredActClasses.set(returnIndex(username), actclass);
  250. StoredActUsernames.set(returnIndex(username), actusername);
  251. StoredActPasswords.set(returnIndex(username), actpassword);
  252. }
  253. else{
  254. StoredActExtras.set(returnIndex(username), StoredActExtras.get(returnIndex(username))+"\n"+actextras);
  255. StoredActClasses.set(returnIndex(username), StoredActClasses.get(returnIndex(username))+"\n"+actclass);
  256. StoredActUsernames.set(returnIndex(username), StoredActUsernames.get(returnIndex(username))+"\n"+actusername);
  257. StoredActPasswords.set(returnIndex(username), StoredActPasswords.get(returnIndex(username))+"\n"+actpassword);
  258. }
  259. }
  260.  
  261. public static int returnIndex(String username){
  262. for(int i=0; i<(StoredUsernames.size()); i++){
  263. if(username.equals((String)StoredUsernames.get(i))){
  264. //System.out.println("Account Exists.");
  265. return i;
  266. }
  267. else{
  268. //System.out.println("Account does not exist.");
  269. return i;
  270. }
  271. }
  272. return 0;
  273. }
  274.  
  275. // Verify Existance in case of duplicate prevention.
  276. public static boolean verifyExistance(String username){
  277. for(int i=0; i<(StoredUsernames.size()); i++){
  278. if(username.equals((String)StoredUsernames.get(i))){
  279. //System.out.println("Account Exists.");
  280. return true;
  281. }
  282. else{
  283. //System.out.println("Account does not exist.");
  284. return false;
  285. }
  286. }
  287. return false;
  288. }
  289.  
  290. // Function for creating account if account is not already created.
  291. public static void createAccount(String username, String pin){
  292. boolean existingaccount = verifyExistance(username);
  293. if(existingaccount == true){
  294. return;
  295. }
  296. else{
  297. StoredUsernames.add(username);
  298. if(pin != null){
  299. StoredPins.add(pin);
  300. StoredActUsernames.add("");
  301. StoredActPasswords.add("");
  302. StoredActClasses.add("");
  303. StoredActExtras.add("");
  304. }
  305. else{
  306. StoredPins.add("NoPin");
  307. StoredActUsernames.add("");
  308. StoredActPasswords.add("");
  309. StoredActClasses.add("");
  310. StoredActExtras.add("");
  311. }
  312. }
  313. }
  314.  
  315. // Find XML Node at the Given Element Name.
  316. static private Node findFirstNamedElement(Node parent, String tagName){
  317. NodeList children = parent.getChildNodes();
  318. for (int i = 0, in = children.getLength(); i<in; i++){
  319. Node child = children.item(i);
  320. if ( child.getNodeType() != Node.ELEMENT_NODE )
  321. continue;
  322. if ( child.getNodeName().equals(tagName) )
  323. return child;
  324. }
  325. return null;
  326. }
  327.  
  328. // Find the Main Node for the Account
  329. static private String getAccountData(Node parent){
  330. StringBuilder text = new StringBuilder();
  331. if(parent == null)
  332. return text.toString();
  333. NodeList children = parent.getChildNodes();
  334. for(int k = 0, kn = children.getLength(); k < kn; k++){
  335. Node child = children.item(k);
  336. if(child.getNodeType() != Node.TEXT_NODE)
  337. break;
  338. text.append(child.getNodeValue());
  339. }
  340. return text.toString();
  341. }
  342.  
  343. // Clear Local Data for Updating.
  344. public static void removeAll(Node node, short nodeType, String name, Object id) {
  345.  
  346. if (node.getNodeType() == nodeType && (name == null || node.getNodeName().equals(name))) {
  347. Element acID = (Element)node;
  348. if(acID.getAttribute("id").equals(id)){
  349. node.getParentNode().removeChild(node);
  350. }
  351. } else {
  352. NodeList list = node.getChildNodes();
  353. for (int i = 0; i < list.getLength(); i++) {
  354. removeAll(list.item(i), nodeType, name, id);
  355. }
  356. }
  357. }
  358.  
  359. private static final String ALPHA_NUMERIC_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  360. public static String randomAlphaNumeric(int count) {
  361. StringBuilder builder = new StringBuilder();
  362. while (count-- != 0) {
  363. int character = (int)(Math.random()*ALPHA_NUMERIC_STRING.length());
  364. builder.append(ALPHA_NUMERIC_STRING.charAt(character));
  365. }
  366. return builder.toString();
  367. }
  368. }
Add Comment
Please, Sign In to add comment