Newer
Older
CosmosServer / src / main / java / com / example / cosmos_serversb / models / Users.java
  1. package com.example.cosmos_serversb.models;
  2.  
  3. import java.util.List;
  4. import java.util.UUID;
  5. import javax.inject.Singleton;
  6. import javax.ws.rs.WebApplicationException;
  7.  
  8. import com.example.cosmos_serversb.entities.*;
  9. import org.hibernate.Session;
  10. import org.hibernate.SessionFactory;
  11. import org.springframework.beans.factory.annotation.Value;
  12.  
  13.  
  14. @Singleton
  15. public class Users {
  16. /**
  17. * ユーザの情報を操作するためクラス
  18. *
  19. * @param Users
  20. * @param SessionFactory
  21. * @param baseURI
  22. * @param AppName
  23. *
  24. * TODO:statusコードを返す
  25. * TODO:baseURIなどは定義ファイルで保持させる
  26. */
  27.  
  28. private static Users theInstance = null;
  29. private static SessionFactory sessionFactory;
  30. private static String baseURI="http://nitta-lab-www.is.konan-u.ac.jp/";
  31. private static String AppName="cosmos";
  32.  
  33. private Users() {
  34. sessionFactory = SessionFactoryManager.getInstance().getSessionFactory();
  35. }
  36.  
  37. public static Users getInstance() {
  38. if (theInstance == null) {
  39. theInstance = new Users();
  40. }
  41. return theInstance;
  42. }
  43.  
  44. public static Token createToken(String uId) {
  45. /**
  46. * Tokenを作成返すためのメソッド
  47. *
  48. * @param uId String
  49. * @param token_str String
  50. * @return token Token
  51. *
  52. * TODO :どこでトークンを保存するか要検討
  53. */
  54. String token = UUID.randomUUID().toString();
  55. Token return_token =new Token(token, uId);
  56. return return_token;
  57. }
  58.  
  59. public static String createUId() {
  60. /**
  61. * uIdを作成し既存していないかチェック後DBに保存し作成したuIdを返すためのメソッド
  62. *
  63. * @param uId String
  64. *
  65. */
  66. String uId = UUID.randomUUID().toString();
  67. return uId;
  68. }
  69.  
  70. public static User createUser(String name, String pw, String iconImage) {
  71. String uId = getInstance().createUId();
  72. String uri = baseURI + AppName +"/users/" +uId;
  73.  
  74. Session session = SessionManager.getInstance().getSession();
  75. Token token = createToken(uId);
  76. User testUser = new User(name, uId, uri, iconImage);
  77. Password password = new Password(pw, uId);
  78. session.save(testUser);
  79. session.save(password);
  80. session.save(token);
  81. return testUser;
  82. }
  83.  
  84. public static User setUser(String uId, String name, String pw, String iconImage) {
  85. /**
  86. * Userの情報を変更するためのメソッド
  87. *
  88. * @param uId String
  89. * @param name String
  90. * @param pw String
  91. * @param iconImage String
  92. *
  93. * TODO: checkPasswordメソッドを用いパスワードを確認する
  94. */
  95. Session session = SessionManager.getInstance().getSession();
  96. List usersList = session.createQuery( "from User" ).list();
  97. List passwordList = session.createQuery("from Password").list();
  98. for ( User user : (List<User>) usersList ) {
  99. if (user.getuId().equals(uId)) {//if (user.getuId().equals(uId) || password.getPw().equals(pw)) {
  100. user.setName(name);
  101. for ( Password password : (List<Password>) passwordList ) {
  102. password.setPw(pw);
  103. session.update(password);
  104. }
  105. if(iconImage != null) {
  106. user.setIconUri(iconImage);
  107. }
  108. session.update(user);
  109. break;
  110. }
  111. }
  112. User findUser = (User) session.load(User.class, uId);
  113. return findUser;
  114. }
  115.  
  116. public static User getUserById(String uId) {
  117. /**
  118. * 与えられたuIdのUser情報を返すためのメソッド
  119. * @param uId
  120. *
  121. */
  122. Session session = SessionManager.getInstance().getSession();
  123. List usersList = session.createQuery( "from User" ).list();
  124. //uIdを比較し、一致した場合はNameとiconUriを返す。一致しない場合はbreak
  125. for ( User user : (List<User>) usersList ) {
  126. if (user.getuId().equals(uId)) {
  127. User findUser = (User) session.load(User.class, uId);
  128. // System.out.println(mapper.valueToTree(findUser).toString());
  129. return findUser;
  130. }
  131. }
  132. //例外処理
  133. return null;
  134. }
  135.  
  136. public static User getUserByToken(String token) {
  137. //与えられたTokenに紐づくUser情報を返す
  138. User testUser = new User("test", getInstance().createUId(), "http://test.com", "http://localhost:8080/iconImage/b4bb7db0-cc0c-4ee1-816f-8304add12da8.jpg");
  139. return testUser;
  140. }
  141.  
  142. public static DeleteResult deleteUser(String uId) {
  143. Session session = SessionManager.getInstance().getSession();
  144. User deleteUser = (User) session.load(User.class, uId);
  145. if(deleteUser != null){
  146. session.delete(deleteUser);
  147. System.out.println("massage: Already Deleted");
  148. }
  149. return DeleteResult.SUCCESS;
  150. }
  151.  
  152. public static Token login(String uId,String pw) {
  153. /**
  154. * tokenを作成したりloginフラグの操作を行うフラグ
  155. * @param uId String
  156. * @param pw String
  157. *
  158. */
  159. if(checkPassword(uId,pw)) {
  160. Token testtoken = getInstance().createToken(uId);
  161. return testtoken;//testToken
  162. }else{
  163. //例外処理
  164. return null;
  165. }
  166. }
  167.  
  168. public static DeleteResult logout(String uId,String token) {
  169. /**
  170. * トークンを削除しログインフラグを操作するためのメソッド
  171. *
  172. * TODO: queryの文に条件文を追加
  173. * TODO :logout 変更
  174. */
  175. Session session = SessionManager.getInstance().getSession();
  176. List usersList = session.createQuery( "from User" ).list();
  177. for ( User user : (List<User>) usersList ) {
  178. if (user.getuId().equals(uId)) {
  179. if (Users.getInstance().getUserByToken(token).uId == null) {
  180. return DeleteResult.FAILURE;
  181. } else {
  182. // Users.getInstance().getUserByToken(token).token.remove(Users.getInstance().getUserByToken(token).token.indexOf(token));
  183. return DeleteResult.SUCCESS;
  184. }
  185. }
  186. }
  187. //例外処理
  188. return null;
  189. }
  190.  
  191. public static boolean checkToken(String uId, String token) {
  192. /**
  193. * uIdとtokenを比較し結果を返すためのメソッド
  194. * @param uId
  195. * @param
  196. */
  197. return true;
  198. }
  199.  
  200. public static boolean checkPassword(String uId, String pw) {
  201. /**
  202. * UIDをキーにパスワードを引き抜き参照
  203. * @param uId
  204. * @param pw String userが提示したパスワード
  205. * @param pw_ans String DBに格納されたパスワード
  206. *
  207. * TODO:パスワードはhash、塩コショウかけて味を調える
  208. */
  209. Session session = SessionManager.getInstance().getSession();
  210. Password findPassword = (Password) session.load(Password.class, uId);
  211. if (findPassword.getPw().equals(pw)) {
  212. return true;
  213. } else {
  214. return false;
  215. }
  216. }
  217. }