1 package de.dlr.shepard.auth.apikey.entities;
2
3 import de.dlr.shepard.auth.users.entities.User;
4 import de.dlr.shepard.common.util.Constants;
5 import de.dlr.shepard.common.util.HasId;
6 import java.util.Date;
7 import java.util.Objects;
8 import java.util.UUID;
9 import lombok.Data;
10 import lombok.NoArgsConstructor;
11 import lombok.ToString;
12 import org.neo4j.ogm.annotation.GeneratedValue;
13 import org.neo4j.ogm.annotation.Id;
14 import org.neo4j.ogm.annotation.NodeEntity;
15 import org.neo4j.ogm.annotation.Relationship;
16 import org.neo4j.ogm.annotation.typeconversion.Convert;
17 import org.neo4j.ogm.annotation.typeconversion.DateLong;
18 import org.neo4j.ogm.id.UuidStrategy;
19 import org.neo4j.ogm.typeconversion.UuidStringConverter;
20
21 @NodeEntity
22 @Data
23 @NoArgsConstructor
24 public class ApiKey implements HasId {
25
26 @Id
27 @GeneratedValue(strategy = UuidStrategy.class)
28 @Convert(UuidStringConverter.class)
29 private UUID uid;
30
31 private String name;
32
33 @DateLong
34 private Date createdAt;
35
36 private String jws;
37
38 @ToString.Exclude
39 @Relationship(type = Constants.BELONGS_TO)
40 private User belongsTo;
41
42 public ApiKey(String name, Date createdAt, User belongsTo) {
43 this.name = name;
44 this.createdAt = createdAt;
45 this.belongsTo = belongsTo;
46 }
47
48
49
50
51
52
53 public ApiKey(UUID uid) {
54 this.uid = uid;
55 }
56
57 @Override
58 public String getUniqueId() {
59 return uid.toString();
60 }
61
62 @Override
63 public int hashCode() {
64 final int prime = 31;
65 int result = 1;
66 result = prime * result + Objects.hash(createdAt, jws, name, uid);
67 result = prime * result + HasId.hashcodeHelper(belongsTo);
68 return result;
69 }
70
71 @Override
72 public boolean equals(Object obj) {
73 if (this == obj) return true;
74 if (!(obj instanceof ApiKey)) return false;
75 ApiKey other = (ApiKey) obj;
76 return (
77 HasId.equalsHelper(belongsTo, other.belongsTo) &&
78 Objects.equals(createdAt, other.createdAt) &&
79 Objects.equals(jws, other.jws) &&
80 Objects.equals(name, other.name) &&
81 Objects.equals(uid, other.uid)
82 );
83 }
84 }