diff --git a/src/main/java/org/ntlab/acanthus_server/entities/Account.java b/src/main/java/org/ntlab/acanthus_server/entities/Account.java index a02616a..dd15d5b 100644 --- a/src/main/java/org/ntlab/acanthus_server/entities/Account.java +++ b/src/main/java/org/ntlab/acanthus_server/entities/Account.java @@ -25,7 +25,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; -import java.util.ArrayList; import java.util.HashMap; import java.util.UUID; diff --git a/src/main/java/org/ntlab/acanthus_server/resources/accounts/AccountsRest.java b/src/main/java/org/ntlab/acanthus_server/resources/accounts/AccountsRest.java index 784c4c1..c6ba6c8 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/accounts/AccountsRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/accounts/AccountsRest.java @@ -8,8 +8,11 @@ import javax.ws.rs.*; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.ResponseBuilder; import java.util.ArrayList; import java.util.Collection; +import java.util.function.Consumer; import java.util.regex.Pattern; @Component @@ -30,21 +33,16 @@ public Collection getAccounts(@QueryParam("name") String name) { var accountJsonList = new ArrayList(); + Consumer addJson = (account) -> { + { + var newAccountJson = new AccountJson(account); + accountJsonList.add(newAccountJson); + } + }; - // 名前の一致するアカウントを返す - if (name != null) { - for (var account : accounts.getAccountsByName(name)) { - var newAccountJson = new AccountJson(account); - accountJsonList.add(newAccountJson); - } - } - // 全アカウントの取得 - else { - for (var account : accounts.getAllAccounts()) { - var newAccountJson = new AccountJson(account); - accountJsonList.add(newAccountJson); - } - } + if (name != null) for (var account : accounts.getAccountsByName(name)) addJson.accept(account); // 名前の一致するアカウントを返す + else for (var account : accounts.getAllAccounts()) addJson.accept(account); // 全アカウントの取得 + return accountJsonList; } @@ -60,13 +58,23 @@ @Path("/{uid}") @Produces(MediaType.APPLICATION_JSON) public Account getAccountByUid(@PathParam("uid") String uidStr, @QueryParam("token") String token) { + var uid = Integer.parseInt(uidStr); var searchAccount = accounts.getAccountByUid(uid); - if (searchAccount == null) throw new WebApplicationException(404); - if (!token.equals(searchAccount.getToken())) throw new WebApplicationException(400); + var response = Response.status(Response.Status.NO_CONTENT); - return searchAccount; + // アカウントの検索 + if (searchAccount == null){ + response = Response.status(404).entity("該当アカウントが存在しません。"); + throw new WebApplicationException(response.build()); + } + + // トークンの検証 + if (!token.equals(searchAccount.getToken())) response = Response.status(400).entity("トークンが違います。"); + else response.status(200).entity(searchAccount).entity("アカウントが見つかりました。"); + + throw new WebApplicationException(response.build()); } //----------------------------------------------------------------- @@ -83,18 +91,24 @@ @Produces(MediaType.APPLICATION_JSON) public int createAccount(@FormParam("name") String name, @FormParam("email") String email, @FormParam("password") String password) { + ResponseBuilder response = Response.status(0); + // パスワード, メアドが正しく入力されているかチェック - if (!isCorrectPassword(password) || !isCorrectEmailAddress(email) || !isCorrectName(name)) - throw new WebApplicationException(401); + if (!isCorrectName(name) || !isCorrectPassword(password) || !isCorrectEmailAddress(email)) { + response.status(401).entity("入力に誤りがあります。"); + throw new WebApplicationException(response.build()); + } // すでに同じメールアドレスが存在しているか var existAccount = accounts.getAccountByEmail(email); - if (existAccount != null) throw new WebApplicationException(400); + if (existAccount != null) response.status(400).entity("入力されたメールアドレスは既に使われています。"); + else { + // アカウント登録 + var newAccount = accounts.registerAccount(name, email, password); + response.status(200).entity(newAccount.getUid()); + } - // アカウント登録 - var newAccount = accounts.registerAccount(name, email, password); - - return newAccount.getUid(); + throw new WebApplicationException(response.build()); } //----------------------------------------------------------------- @@ -105,7 +119,6 @@ /** * @param emailAddress メアド */ - @SuppressWarnings("{unchecked}") // 正規表現の警告無視 private boolean isCorrectEmailAddress(String emailAddress) { var aText = "[a-zA-Z0-9_!#¥¥$¥¥%&'*+/=?¥¥^`{}~|¥¥-]+"; diff --git a/src/main/java/org/ntlab/acanthus_server/resources/accounts/LoginRest.java b/src/main/java/org/ntlab/acanthus_server/resources/accounts/LoginRest.java index ad131cd..adbb211 100644 --- a/src/main/java/org/ntlab/acanthus_server/resources/accounts/LoginRest.java +++ b/src/main/java/org/ntlab/acanthus_server/resources/accounts/LoginRest.java @@ -1,10 +1,16 @@ package org.ntlab.acanthus_server.resources.accounts; +import org.glassfish.jersey.spi.Contract; import org.ntlab.acanthus_server.models.Accounts; +import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; +import javax.validation.constraints.NotNull; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.ResponseBuilder; +import java.util.ResourceBundle; @Component @Path("/accounts/login") @@ -21,13 +27,17 @@ @GET @Produces(MediaType.APPLICATION_JSON) public boolean hasLoginToken(@QueryParam("uid") String uidStr, @QueryParam("token") String token) { + + var response = Response.status(Response.Status.NO_CONTENT); var uid = Integer.parseInt(uidStr); var searchAccount = accounts.getAccountByUid(uid); - if (searchAccount == null) throw new WebApplicationException(404); - if (!token.equals(searchAccount.getToken())) throw new WebApplicationException(400); + // アカウントとトークンの検証 + if (searchAccount == null) response.status(404).entity(false); + if (!token.equals(searchAccount.getToken())) response.status(400).entity(false); + else response.status(200).entity(true); - throw new WebApplicationException(200); + throw new WebApplicationException(response.build()); } //----------------------------------------------------------- @@ -42,13 +52,18 @@ @Produces(MediaType.APPLICATION_JSON) public String issueLoginToken(@FormParam("email") String email, @FormParam("password") String password) { + var response = Response.status(Response.Status.NO_CONTENT); var searchAccount = accounts.getAccountByEmail(email); - if (searchAccount == null) throw new WebApplicationException(400); - if (!searchAccount.isMatchedPassword(password)) throw new WebApplicationException(401); + if (searchAccount == null) response.status(404).entity("アカウントが存在しません。"); + if (!searchAccount.isMatchedPassword(password)) response.entity(401).entity("不正なパスワードです。"); + else { + // トークンをアカウントに設定 + searchAccount.updateToken(); + response.status(201).entity(searchAccount.getToken()); + } - searchAccount.updateToken(); // トークンをアカウントに設定 - return searchAccount.getToken(); + throw new WebApplicationException(response.build()); } //-----------------------------------------------------------