source: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JwtServiceImpl.java@ befb988

main
Last change on this file since befb988 was befb988, checked in by 223021 <daniel.ilievski.2@…>, 12 days ago

Added an edit profile page for both job seekers and recruiters, where they can upload profile pictures/company logos and edit their profile data. Added profile page specifically for recruiters. Refactored existing code.

  • Property mode set to 100644
File size: 2.7 KB
Line 
1package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.impl;
2
3import io.jsonwebtoken.Claims;
4import io.jsonwebtoken.Jwts;
5import io.jsonwebtoken.SignatureAlgorithm;
6import io.jsonwebtoken.io.Decoders;
7import io.jsonwebtoken.security.Keys;
8import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.User;
9import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.JwtService;
10import org.springframework.security.core.userdetails.UserDetails;
11import org.springframework.stereotype.Service;
12
13import java.security.Key;
14import java.util.Date;
15import java.util.Map;
16import java.util.function.Function;
17
18@Service
19public class JwtServiceImpl implements JwtService {
20 private final static String SECRET_KEY = "7191b1d33668d4a2316a02f9a40798b77bccd22173bd882c93a0a916a5e921d1";
21
22 public String generateToken(User user) {
23 return Jwts.builder().setSubject(user.getUsername())
24 .claim("name", user.getName())
25 .claim("role", user.getRole())
26 .claim("access", user.isHasAccess())
27 .claim("id", user.getId())
28 .setIssuedAt(new Date())
29 .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))
30 .signWith(getSigninKey(), SignatureAlgorithm.HS256)
31 .compact();
32 }
33
34 @Override
35 public String generateRefreshToken(Map<String, Object> extraClaims, UserDetails userDetails) {
36 return Jwts.builder().setClaims(extraClaims).setSubject(userDetails.getUsername())
37 .setIssuedAt(new Date())
38 .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 7))
39 .signWith(getSigninKey(), SignatureAlgorithm.HS256)
40 .compact();
41 }
42
43 private Key getSigninKey() {
44 byte[] key = Decoders.BASE64.decode(SECRET_KEY);
45 return Keys.hmacShaKeyFor(key);
46 }
47
48 private Claims extractAllClaims(String token) {
49 return Jwts.parserBuilder().setSigningKey(getSigninKey()).build().parseClaimsJws(token).getBody();
50 }
51
52 public <T> T extractClaim(String token, Function<Claims, T> claimsResolver) {
53 final Claims claims = extractAllClaims(token);
54 return claimsResolver.apply(claims);
55 }
56
57 @Override
58 public String extractUsername(String token) {
59 return extractClaim(token, Claims::getSubject);
60 }
61
62 @Override
63 public boolean isTokenValid(String token, UserDetails userDetails) {
64 final String username = extractUsername(token);
65 return username.equals(userDetails.getUsername()) && !isTokenExpired(token);
66 }
67
68 @Override
69 public boolean isTokenExpired(String token) {
70 return extractClaim(token, Claims::getExpiration).before(new Date());
71 }
72}
Note: See TracBrowser for help on using the repository browser.