Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.42 KB | None | 0 0
  1. import java.io.*;
  2. import java.net.*;
  3. import java.security.KeyStore;
  4. import javax.net.*;
  5. import javax.net.ssl.*;
  6. import javax.security.cert.X509Certificate;
  7. import java.util.HashMap;
  8.  
  9. public class server implements Runnable {
  10. private ServerSocket serverSocket = null;
  11. private static int numConnectedClients = 0;
  12.  
  13. public server(ServerSocket ss) throws IOException {
  14. serverSocket = ss;
  15. newListener();
  16. }
  17.  
  18. public String[] getGroupPrivilege(String subject){
  19. String group = "";
  20. String privilege = "";
  21. String[] result = new String[2];
  22. for(int i = 0; i < subject.length()-2; i++){
  23. if(subject.charAt(i)== 'O' && subject.charAt(i+1) == 'U' && subject.charAt(i+2) == '='){
  24. while(subject.charAt(i+3) != ','){
  25. group+= subject.charAt(i+3);
  26. i++;
  27. }
  28. break;
  29. }
  30. }
  31. for(int i = 0; i < subject.length()-2; i++){
  32. if(subject.charAt(i)== 'O' && subject.charAt(i+1) == '='){
  33. while(subject.charAt(i+2) != ','){
  34. privilege+= subject.charAt(i+2);
  35. i++;
  36. }
  37. break;
  38. }
  39. }
  40. result[0] = group;
  41. result[1]= privilege;
  42. return result;
  43. }
  44.  
  45. public HashMap read(String username) throws FileNotFoundException, IOException{
  46. BufferedReader br = new BufferedReader(new FileReader("file.txt"));
  47. HashMap<String, String> passwords = new HashMap<String, String>();
  48. try {
  49. String line = br.readLine();
  50.  
  51. while (line != null) {
  52. String[] user = line.split(" ", 0);
  53. passwords.put(user[0], user[1]);
  54. line = br.readLine();
  55. }
  56. return passwords;
  57. } finally {
  58. br.close();
  59. }
  60. }
  61. public String getGroup(String username) throws FileNotFoundException, IOException{
  62. BufferedReader br = new BufferedReader(new FileReader("file.txt"));
  63. try {
  64. String line = br.readLine();
  65.  
  66. while (line != null) {
  67. String[] user = line.split(" ", 0);
  68. System.out.println(user[0]);
  69. if(user[0].equals(username)){
  70. return user[1];
  71. }
  72. line = br.readLine();
  73. }
  74. return "-1";
  75. } finally {
  76. br.close();
  77. }
  78. }
  79. public String getName(String subject){
  80. String name = "";
  81. for(int i = 0; i < subject.length()-2; i++){
  82. if(subject.charAt(i)== 'C' && subject.charAt(i+1) == 'N' && subject.charAt(i+2) == '=' && subject.charAt(i+3) == '"'){
  83. while(subject.charAt(i+4) != '"'){
  84. name+= subject.charAt(i+4);
  85. i++;
  86. }
  87. break;
  88. }
  89. }
  90. return name;
  91. }
  92. public Boolean isAssociated(String name, String patient) throws FileNotFoundException, IOException{
  93. String file = patient+"/file.txt";
  94.  
  95. BufferedReader br = new BufferedReader(new FileReader(file));
  96. try {
  97. String line = br.readLine();
  98.  
  99. while (line != null) {
  100. if(line.equals(name)){
  101. return true;
  102. }
  103. line = br.readLine();
  104. }
  105. return false;
  106. } finally {
  107. br.close();
  108. }
  109. }
  110.  
  111. public Boolean getPass(String action, String subject, String patient) throws FileNotFoundException, IOException{
  112. String[] groupPrivilege = getGroupPrivilege(subject);
  113. switch(groupPrivilege[1]){
  114.  
  115. case "government":
  116. if(action.equals("delete")){
  117. return true;
  118. }
  119. break;
  120.  
  121. case "doctor":
  122. if(action.equals("read")){
  123. if(groupPrivilege[0].equals(getGroup(patient))){
  124. return true;
  125. }
  126. return false;
  127. }
  128. if(action.equals("write"))
  129. break;
  130.  
  131. case "nurse":
  132. return false;
  133.  
  134. }
  135. return false;
  136. }
  137. public void run() {
  138. try {
  139. SSLSocket socket=(SSLSocket)serverSocket.accept();
  140. newListener();
  141. SSLSession session = socket.getSession();
  142. X509Certificate cert = (X509Certificate)session.getPeerCertificateChain()[0];
  143. String subject = cert.getSubjectDN().getName();
  144. String issuer = cert.getIssuerDN().getName();
  145. int serial = cert.getSerialNumber().intValue();
  146. numConnectedClients++;
  147. System.out.println("client connected");
  148. System.out.println("client name (cert subject DN field): " + subject);
  149. System.out.println("client name (cert issuer DN field): " + issuer);
  150. System.out.println(serial);
  151. System.out.println(numConnectedClients + " concurrent connection(s)\n");
  152. HashMap läs = read("ss");
  153. System.out.println(läs.get("rrrrr"));
  154. PrintWriter out = null;
  155. BufferedReader in = null;
  156. out = new PrintWriter(socket.getOutputStream(), true);
  157. in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  158. String[] res = getGroupPrivilege(subject);
  159. Boolean name =isAssociated(getName(subject), "1");
  160. System.out.println(name);
  161. String clientMsg = null;
  162. String action = in.readLine();
  163. String patient = in.readLine();
  164. String doc = in.readLine();
  165. while ((clientMsg = in.readLine()) != null) {
  166. String rev = new StringBuilder(clientMsg).reverse().toString();
  167. out.println(rev);
  168. out.flush();
  169. }
  170. in.close();
  171. out.close();
  172. socket.close();
  173. numConnectedClients--;
  174. System.out.println("client disconnected");
  175. System.out.println(numConnectedClients + " concurrent connection(s)\n");
  176. } catch (IOException e) {
  177. System.out.println("Client died: " + e.getMessage());
  178. e.printStackTrace();
  179. return;
  180. }
  181. }
  182.  
  183. private void newListener() { (new Thread(this)).start(); } // calls run()
  184.  
  185. public static void main(String args[]) {
  186. System.out.println("\nServer Started\n");
  187. int port = -1;
  188. if (args.length >= 1) {
  189. port = Integer.parseInt(args[0]);
  190. }
  191. String type = "TLS";
  192. try {
  193. ServerSocketFactory ssf = getServerSocketFactory(type);
  194. ServerSocket ss = ssf.createServerSocket(port);
  195. ((SSLServerSocket)ss).setNeedClientAuth(true); // enables client authentication
  196. new server(ss);
  197. } catch (IOException e) {
  198. System.out.println("Unable to start Server: " + e.getMessage());
  199. e.printStackTrace();
  200. }
  201. }
  202.  
  203. private static ServerSocketFactory getServerSocketFactory(String type) {
  204. if (type.equals("TLS")) {
  205. SSLServerSocketFactory ssf = null;
  206. try { // set up key manager to perform server authentication
  207. SSLContext ctx = SSLContext.getInstance("TLS");
  208. KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
  209. TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
  210. KeyStore ks = KeyStore.getInstance("JKS");
  211. KeyStore ts = KeyStore.getInstance("JKS");
  212. char[] password = "password".toCharArray();
  213.  
  214. ks.load(new FileInputStream("serverkeystore"), password); // keystore password (storepass)
  215. ts.load(new FileInputStream("servertruststore"), password); // truststore password (storepass)
  216. kmf.init(ks, password); // certificate password (keypass)
  217. tmf.init(ts); // possible to use keystore as truststore here
  218. ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
  219. ssf = ctx.getServerSocketFactory();
  220. return ssf;
  221. } catch (Exception e) {
  222. e.printStackTrace();
  223. }
  224. } else {
  225. return ServerSocketFactory.getDefault();
  226. }
  227. return null;
  228. }
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement