Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

удалены комментарии #19

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions backend/auth/.idea/encodings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion backend/auth/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@
@ConfigurationPropertiesScan("ru.naumen.ectmauth.config")
public class Application {




public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,26 +60,19 @@ public User registerUser(@RequestBody User user) throws ServletException, NoSuch
@Operation(summary = "Ожидает почту и пароль пользователя, чтоб войти и получить токены")
@PostMapping("/login")
@ResponseBody
public void login( @RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String headerStr, HttpServletRequest request, HttpServletResponse response) throws ServletException, NoSuchAlgorithmException {
public void login(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String headerStr, HttpServletRequest request, HttpServletResponse response) throws ServletException, NoSuchAlgorithmException {


/* String encodedCredentials = request
.getHeader(HttpHeaders.AUTHORIZATION)
.replace("Basic ", "");*/
String encodedCredentials=headerStr.replace("Basic ", "");
String encodedCredentials = headerStr.replace("Basic ", "");

String[] decodedCredentials = new String(Base64.getUrlDecoder().decode(encodedCredentials)).split(":");


String email = decodedCredentials[0];
String password = decodedCredentials[1];
/* String email = json.get("email");
String password = json.get("password");
if (email == null || password == null) {
throw new ServletException("Please fill in username and password");
}*/

System.out.println("Hello "+email+" "+password);

System.out.println("Hello " + email + " " + password);

User user = userService.findByEmail(email);

Expand All @@ -93,7 +86,7 @@ public void login( @RequestHeader(value = HttpHeaders.AUTHORIZATION, required =
throw new ServletException("Invalid login. Please check your name and password.");
}

System.out.println("Hello "+email+" "+user.getFirstName());
System.out.println("Hello " + email + " " + user.getFirstName());
Map<String, String> tokens = jwtService.createNewTokens(user.getUser_id(), email, user.getFirstName(), user.getLastName(), user.getProvider());

Cookie cookie_access_token = new Cookie("access_token", tokens.get("access_token"));
Expand All @@ -105,63 +98,14 @@ public void login( @RequestHeader(value = HttpHeaders.AUTHORIZATION, required =

}

/* @Operation(summary = "Выдает новые токены в куки")
@PostMapping("/newToken")
@ResponseBody
public void newToken(@RequestBody(required = false) Map<String, String> json, HttpServletResponse response) {
if (json == null) {
response.setStatus(HttpStatus.FORBIDDEN.value());

}

String email;
String refreshToken;
try {
Jwt<Header, Claims> jwt = Jwts.parser().setSigningKey(JWT_PASSWORD).parse(json.get("access_token"));
email = (String) jwt.getBody().get("email");
refreshToken = json.get("refresh_token");
} catch (ExpiredJwtException e) {
email = (String) e.getClaims().get("email");
refreshToken = json.get("refresh_token");
}

if (email == null || refreshToken == null) {
response.setStatus(HttpStatus.FORBIDDEN.value());
}
else {
String finalRefreshToken = refreshToken;
User user = userService.findByEmail(email);
if (user.getTokens().stream().anyMatch(t -> t.getRefresh_token().equals(finalRefreshToken))) {
tokenService.delete(user.getTokens().stream().filter(t -> t.getRefresh_token().equals(finalRefreshToken)).findFirst().get());
Map<String, String> tokens = jwtService.createNewTokens(user.getUser_id(), email, user.getFirstName(), user.getLastName(), user.getProvider());
Cookie cookie_access_token = new Cookie("access_token", tokens.get("access_token"));
cookie_access_token.setHttpOnly(true);
response.addCookie(cookie_access_token);
Cookie cookie_refresh_token = new Cookie("refresh_token", tokens.get("refresh_token"));
cookie_refresh_token.setHttpOnly(true);
response.addCookie(cookie_refresh_token);


} else {
response.setStatus(HttpStatus.FORBIDDEN.value());

}
}

}
*/
//@CookieValue(value = "refresh_token") String refresh_token_input
@Operation(summary = "Выдает новые токены в куки")
@PostMapping("/newToken")
@ResponseBody
@ApiModelProperty(
value = "A JSON value representing a transaction. An example of the expected schema can be found down here. The fields marked with an * means that they are required.",
example = "{foo: whatever, bar: whatever2}")
public void newToken(@CookieValue(value = "access_token",required = false) String access_token_input, @CookieValue(value = "refresh_token",required = false) String refresh_token_input,HttpServletResponse response) {

// System.out.println("kek");

// return ResponseEntity.ok().body(access_token_input+" \n"+refresh_token_input);
public void newToken(@CookieValue(value = "access_token", required = false) String access_token_input, @CookieValue(value = "refresh_token", required = false) String refresh_token_input, HttpServletResponse response) {


String email;
Expand All @@ -177,8 +121,7 @@ public void newToken(@CookieValue(value = "access_token",required = false) Strin

if (email == null || refreshToken == null) {
response.setStatus(HttpStatus.FORBIDDEN.value());
}
else {
} else {
String finalRefreshToken = refreshToken;
User user = userService.findByEmail(email);
if (user.getTokens().stream().anyMatch(t -> t.getRefresh_token().equals(finalRefreshToken))) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,10 @@ public class VKController {
private final Integer port = Integer.valueOf(System.getenv("PORT"));




TransportClient transportClient = HttpTransportClient.getInstance();
VkApiClient vk = new VkApiClient(transportClient);


/* public VKController() throws ClientException, ApiException {

}*/

@Operation(summary = "Авторизоваться через Вконтакте")
@GetMapping("/authorize")
@ResponseBody
Expand All @@ -78,7 +72,7 @@ public void callback(@RequestParam("code") String code, HttpServletResponse resp
if (user == null) {
user = createNewUser(authResponse.getUserId(), authResponse.getAccessToken());
}
System.out.println(1+" callback_VK "+user.getFirstName()+" "+user.getLastName()+" "+user.getVk_id());
System.out.println(1 + " callback_VK " + user.getFirstName() + " " + user.getLastName() + " " + user.getVk_id());
Map<String, String> tokens = jwtService.createNewTokensWithSocialNetwork(user.getUser_id(), user.getEmail(), user.getFirstName(), user.getLastName(), user.getProvider(), authResponse.getAccessToken());
Cookie cookie_access_token = new Cookie("access_token", tokens.get("access_token"));
cookie_access_token.setHttpOnly(true);
Expand Down Expand Up @@ -108,7 +102,6 @@ private String getRedirectUri() {
}



private User createNewUser(Integer user_vk_id, String token) {

User user = new User();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package ru.naumen.ectmauth.entity;

public enum Provider {
LOCAL, FACEBOOK, VK
LOCAL, FACEBOOK, VK
}
14 changes: 8 additions & 6 deletions backend/auth/src/main/java/ru/naumen/ectmauth/entity/Token.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,12 @@
import java.util.Optional;

@Entity
@Table(name="tokens")
@Table(name = "tokens")
public class Token {



@Id
@Column(name="token_id")
@Column(name = "token_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long token_id;
@CreationTimestamp
Expand All @@ -37,7 +36,6 @@ public class Token {
private String access_token_FB;



public Long getToken_id() {
return token_id;
}
Expand Down Expand Up @@ -86,9 +84,13 @@ public void setAccess_token_VK(String access_token_VK) {
this.access_token_VK = access_token_VK;
}

public String getAccess_token_FB() { return access_token_FB; }
public String getAccess_token_FB() {
return access_token_FB;
}

public void setAccess_token_FB(String access_token_FB) { this.access_token_FB = access_token_FB; }
public void setAccess_token_FB(String access_token_FB) {
this.access_token_FB = access_token_FB;
}


}
33 changes: 20 additions & 13 deletions backend/auth/src/main/java/ru/naumen/ectmauth/entity/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@
import org.hibernate.annotations.CreationTimestamp;

@Entity
@Table(name="users")
@Table(name = "users")
public class User {

@Id
@Column(name="user_id")
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Schema(accessMode = Schema.AccessMode.READ_ONLY)
private Long user_id;
@CreationTimestamp
@Schema(accessMode = Schema.AccessMode.READ_ONLY,description = "Дата создания пользователя")
@Schema(accessMode = Schema.AccessMode.READ_ONLY, description = "Дата создания пользователя")
private Date created;
@Schema(description = "Почта", example = "[email protected]")
private String email;
Expand All @@ -33,17 +33,16 @@ public class User {
private String phone;

@Enumerated(EnumType.STRING)
@Schema(accessMode = Schema.AccessMode.READ_ONLY,description = "Провайдер", example = "VK")
@Schema(accessMode = Schema.AccessMode.READ_ONLY, description = "Провайдер", example = "VK")
private Provider provider;
@Schema(accessMode = Schema.AccessMode.READ_ONLY)
private boolean enabled;
@Schema(accessMode = Schema.AccessMode.READ_ONLY,description = "Идентификатор пользователя Вконтакте")
@Schema(accessMode = Schema.AccessMode.READ_ONLY, description = "Идентификатор пользователя Вконтакте")
private String vk_id;
@Schema(accessMode = Schema.AccessMode.READ_ONLY,description = "Идентификатор пользователя Вконтакте")
@Schema(accessMode = Schema.AccessMode.READ_ONLY, description = "Идентификатор пользователя Вконтакте")
private String fb_id;



@Schema(accessMode = Schema.AccessMode.READ_ONLY)
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(
Expand All @@ -66,7 +65,6 @@ public void setTokens(Set<Token> tokens) {
}



public Long getUser_id() {
return user_id;
}
Expand Down Expand Up @@ -107,9 +105,10 @@ public void setPassword(String password) {
this.password = password;
}

public String getPhone() {
public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone;
}
Expand Down Expand Up @@ -146,11 +145,19 @@ public void setProvider(Provider provider) {
this.provider = provider;
}

public String getVk_id() { return vk_id; }
public String getVk_id() {
return vk_id;
}

public void setVk_id(String vk_id) { this.vk_id = vk_id; }
public void setVk_id(String vk_id) {
this.vk_id = vk_id;
}

public String getFb_id() { return fb_id; }
public String getFb_id() {
return fb_id;
}

public void setFb_id(String fb_id) { this.fb_id = fb_id; }
public void setFb_id(String fb_id) {
this.fb_id = fb_id;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
@Repository
public interface TokenRepository extends CrudRepository<Token, Long> {
Token save(Token token);
void delete (Token token);

void delete(Token token);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,4 @@ public interface UserRepository extends CrudRepository<User, Long> {
@Query("SELECT u FROM User u WHERE u.fb_id = :fb_id")
public User findByFb_id(@Param("fb_id") String fb_id);



}
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ public class JWTService {

private static final String JWT_PASSWORD = "bm5n3SkxCX4kKRy4";

public Map<String, String> createNewTokensWithSocialNetwork(Long id, String email, String first_name, String last_name, Provider provider, String access_token_vk_or_fb){
public Map<String, String> createNewTokensWithSocialNetwork(Long id, String email, String first_name, String last_name, Provider provider, String access_token_vk_or_fb) {
Map<String, Object> claims = new HashMap<>();
claims.put("admin", "false");
claims.put("email", email);
String accessToken = getSecretToken(id,email,first_name,last_name, provider);//jwt builder
String accessToken = getSecretToken(id, email, first_name, last_name, provider);//jwt builder
Map<String, String> tokenJson = new HashMap<>();
String refreshToken = RandomStringUtils.randomAlphabetic(20);
Token t=new Token();
Token t = new Token();
t.setRefresh_token(refreshToken);
t.setUser(userService.findById(id));
t.setAccess_token(accessToken);
Expand All @@ -49,18 +49,18 @@ public Map<String, String> createNewTokensWithSocialNetwork(Long id, String emai
}

public Map<String, String> createNewTokens(Long id, String email, String first_name, String last_name, Provider provider) {
return createNewTokensWithSocialNetwork(id,email,first_name,last_name,provider,null);
return createNewTokensWithSocialNetwork(id, email, first_name, last_name, provider, null);
}

private String getSecretToken( Long id,String email, String first_name, String last_name, Provider provider) {
private String getSecretToken(Long id, String email, String first_name, String last_name, Provider provider) {
return Jwts.builder()
.setIssuer("Auth Server Ekb Trees")
.setIssuedAt(Calendar.getInstance().getTime())
.setExpiration(Date.from(Instant.now().plusSeconds(100000)))
.claim("id",id)
.claim("id", id)
.claim("email", email)
.claim("first_name",first_name)
.claim("last_name",last_name)
.claim("first_name", first_name)
.claim("last_name", last_name)
.claim("Role", userService.findById(id).get().getRoles().stream().map(Role::getName).toArray(String[]::new))
.signWith(SignatureAlgorithm.HS256, JWT_PASSWORD).compact();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ public class TokenService {
public Token save(Token token) {
return tokenRepository.save(token);
}
public void delete(Token token){ tokenRepository.delete(token);}

public void delete(Token token) {
tokenRepository.delete(token);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@

public interface UserService {
User save(User user);

User findByEmail(String email);

User findByVk_id(String vk_id);

User findByFb_id(String fb_id);
Optional<User> findById(Long id);

Optional<User> findById(Long id);

}
Loading