6
6
import com .google .common .base .Strings ;
7
7
import com .google .common .hash .Hashing ;
8
8
9
+ import com .ctrip .framework .apollo .common .exception .BadRequestException ;
9
10
import com .ctrip .framework .apollo .openapi .entity .Consumer ;
10
11
import com .ctrip .framework .apollo .openapi .entity .ConsumerAudit ;
12
+ import com .ctrip .framework .apollo .openapi .entity .ConsumerRole ;
11
13
import com .ctrip .framework .apollo .openapi .entity .ConsumerToken ;
12
14
import com .ctrip .framework .apollo .openapi .repository .ConsumerAuditRepository ;
13
15
import com .ctrip .framework .apollo .openapi .repository .ConsumerRepository ;
16
+ import com .ctrip .framework .apollo .openapi .repository .ConsumerRoleRepository ;
14
17
import com .ctrip .framework .apollo .openapi .repository .ConsumerTokenRepository ;
15
18
import com .ctrip .framework .apollo .portal .component .config .PortalConfig ;
19
+ import com .ctrip .framework .apollo .portal .entity .bo .UserInfo ;
20
+ import com .ctrip .framework .apollo .portal .entity .po .Role ;
21
+ import com .ctrip .framework .apollo .portal .service .RolePermissionService ;
22
+ import com .ctrip .framework .apollo .portal .spi .UserInfoHolder ;
23
+ import com .ctrip .framework .apollo .portal .spi .UserService ;
24
+ import com .ctrip .framework .apollo .portal .util .RoleUtils ;
16
25
17
26
import org .apache .commons .lang .time .FastDateFormat ;
18
27
import org .springframework .beans .factory .annotation .Autowired ;
19
28
import org .springframework .stereotype .Service ;
20
29
import org .springframework .transaction .annotation .Transactional ;
21
30
31
+ import java .util .Arrays ;
22
32
import java .util .Date ;
33
+ import java .util .List ;
23
34
24
35
/**
25
36
* @author Jason Song(song_s@ctrip.com)
26
37
*/
27
38
@ Service
28
39
public class ConsumerService {
29
- static final String TOKEN_SALT_KEY = "consumer.token.salt" ;
30
- private static final FastDateFormat TIMESTAMP_FORMAT = FastDateFormat .getInstance
31
- ("yyyyMMddHHmmss" );
40
+
41
+ private static final FastDateFormat TIMESTAMP_FORMAT = FastDateFormat .getInstance ("yyyyMMddHHmmss" );
32
42
private static final Joiner KEY_JOINER = Joiner .on ("|" );
43
+
44
+ @ Autowired
45
+ private UserInfoHolder userInfoHolder ;
33
46
@ Autowired
34
47
private ConsumerTokenRepository consumerTokenRepository ;
35
48
@ Autowired
36
49
private ConsumerRepository consumerRepository ;
37
50
@ Autowired
38
51
private ConsumerAuditRepository consumerAuditRepository ;
39
52
@ Autowired
53
+ private ConsumerRoleRepository consumerRoleRepository ;
54
+ @ Autowired
40
55
private PortalConfig portalConfig ;
56
+ @ Autowired
57
+ private RolePermissionService rolePermissionService ;
58
+ @ Autowired
59
+ private UserService userService ;
60
+
61
+
62
+ public Consumer createConsumer (Consumer consumer ) {
63
+ String appId = consumer .getAppId ();
64
+
65
+ Consumer managedConsumer = consumerRepository .findByAppId (appId );
66
+ if (managedConsumer != null ) {
67
+ throw new BadRequestException ("Consumer already exist" );
68
+ }
69
+
70
+ String ownerName = consumer .getOwnerName ();
71
+ UserInfo owner = userService .findByUserId (ownerName );
72
+ if (owner == null ) {
73
+ throw new BadRequestException (String .format ("User does not exist. UserId = %s" , ownerName ));
74
+ }
75
+ consumer .setOwnerEmail (owner .getEmail ());
76
+
77
+ String operator = userInfoHolder .getUser ().getUserId ();
78
+ consumer .setDataChangeCreatedBy (operator );
79
+ consumer .setDataChangeLastModifiedBy (operator );
80
+
81
+ return consumerRepository .save (consumer );
82
+ }
83
+
84
+ public ConsumerToken generateAndSaveConsumerToken (Consumer consumer , Date expires ) {
85
+ Preconditions .checkArgument (consumer != null , "Consumer can not be null" );
86
+
87
+ ConsumerToken consumerToken = generateConsumerToken (consumer , expires );
88
+ consumerToken .setId (0 );
89
+
90
+ return consumerTokenRepository .save (consumerToken );
91
+ }
92
+
93
+ public ConsumerToken getConsumerTokenByAppId (String appId ) {
94
+ Consumer consumer = consumerRepository .findByAppId (appId );
95
+ if (consumer == null ) {
96
+ return null ;
97
+ }
98
+
99
+ return consumerTokenRepository .findByConsumerId (consumer .getId ());
100
+ }
41
101
42
102
public Long getConsumerIdByToken (String token ) {
43
103
if (Strings .isNullOrEmpty (token )) {
44
104
return null ;
45
105
}
46
106
ConsumerToken consumerToken = consumerTokenRepository .findTopByTokenAndExpiresAfter (token ,
47
- new Date ());
107
+ new Date ());
48
108
return consumerToken == null ? null : consumerToken .getConsumerId ();
49
109
}
50
110
51
111
public Consumer getConsumerByConsumerId (long consumerId ) {
52
112
return consumerRepository .findOne (consumerId );
53
113
}
54
114
55
- public void generateAndEnrichConsumerToken (ConsumerToken consumerToken ) {
56
- Consumer consumer = getConsumerByConsumerId (consumerToken .getConsumerId ());
115
+ @ Transactional
116
+ public List <ConsumerRole > assignNamespaceRoleToConsumer (String token , String appId , String namespaceName ) {
117
+ Long consumerId = getConsumerIdByToken (token );
118
+ if (consumerId == null ) {
119
+ throw new BadRequestException ("Token is Illegal" );
120
+ }
57
121
58
- Preconditions .checkState (consumer != null , String .format ("Consumer with id: %d not found!" ,
59
- consumerToken .getConsumerId ()));
122
+ Role namespaceModifyRole =
123
+ rolePermissionService .findRoleByRoleName (RoleUtils .buildModifyNamespaceRoleName (appId , namespaceName ));
124
+ Role namespaceReleaseRole =
125
+ rolePermissionService .findRoleByRoleName (RoleUtils .buildReleaseNamespaceRoleName (appId , namespaceName ));
60
126
61
- if (consumerToken . getDataChangeCreatedTime () == null ) {
62
- consumerToken . setDataChangeCreatedTime ( new Date () );
127
+ if (namespaceModifyRole == null || namespaceReleaseRole == null ) {
128
+ throw new BadRequestException ( "Namespace's role does not exist. Please check whether namespace has created." );
63
129
}
64
- consumerToken .setToken (generateConsumerToken (consumer .getAppId (), consumerToken
65
- .getDataChangeCreatedTime (), portalConfig .consumerTokenSalt ()));
130
+
131
+ long namespaceModifyRoleId = namespaceModifyRole .getId ();
132
+ long namespaceReleaseRoleId = namespaceReleaseRole .getId ();
133
+
134
+ ConsumerRole managedModifyRole = consumerRoleRepository .findByConsumerIdAndRoleId (consumerId , namespaceModifyRoleId );
135
+ if (managedModifyRole != null ) {
136
+ throw new BadRequestException ("Namespace's role has assigned to consumer." );
137
+ }
138
+
139
+ String operator = userInfoHolder .getUser ().getUserId ();
140
+
141
+ ConsumerRole namespaceModifyConsumerRole = createConsumerRole (consumerId , namespaceModifyRoleId , operator );
142
+ ConsumerRole namespaceReleaseConsumerRole = createConsumerRole (consumerId , namespaceReleaseRoleId , operator );
143
+
144
+ ConsumerRole createdModifyConsumerRole = consumerRoleRepository .save (namespaceModifyConsumerRole );
145
+ ConsumerRole createdReleaseConsumerRole = consumerRoleRepository .save (namespaceReleaseConsumerRole );
146
+
147
+ return Arrays .asList (createdModifyConsumerRole , createdReleaseConsumerRole );
148
+ }
149
+
150
+ @ Transactional
151
+ public void createConsumerAudits (Iterable <ConsumerAudit > consumerAudits ) {
152
+ consumerAuditRepository .save (consumerAudits );
66
153
}
67
154
68
155
@ Transactional
@@ -72,15 +159,50 @@ public ConsumerToken createConsumerToken(ConsumerToken entity) {
72
159
return consumerTokenRepository .save (entity );
73
160
}
74
161
75
- @ Transactional
76
- public void createConsumerAudits (Iterable <ConsumerAudit > consumerAudits ) {
77
- consumerAuditRepository .save (consumerAudits );
162
+ private ConsumerToken generateConsumerToken (Consumer consumer , Date expires ) {
163
+ long consumerId = consumer .getId ();
164
+ String createdBy = userInfoHolder .getUser ().getUserId ();
165
+ Date createdTime = new Date ();
166
+
167
+ ConsumerToken consumerToken = new ConsumerToken ();
168
+ consumerToken .setConsumerId (consumerId );
169
+ consumerToken .setExpires (expires );
170
+ consumerToken .setDataChangeCreatedBy (createdBy );
171
+ consumerToken .setDataChangeCreatedTime (createdTime );
172
+ consumerToken .setDataChangeLastModifiedBy (createdBy );
173
+ consumerToken .setDataChangeLastModifiedTime (createdTime );
174
+
175
+ generateAndEnrichToken (consumer , consumerToken );
176
+
177
+ return consumerToken ;
178
+ }
179
+
180
+ void generateAndEnrichToken (Consumer consumer , ConsumerToken consumerToken ) {
181
+
182
+ Preconditions .checkArgument (consumer != null );
183
+
184
+ if (consumerToken .getDataChangeCreatedTime () == null ) {
185
+ consumerToken .setDataChangeCreatedTime (new Date ());
186
+ }
187
+ consumerToken .setToken (generateToken (consumer .getAppId (), consumerToken
188
+ .getDataChangeCreatedTime (), portalConfig .consumerTokenSalt ()));
78
189
}
79
190
80
- String generateConsumerToken (String consumerAppId , Date generationTime , String
191
+ String generateToken (String consumerAppId , Date generationTime , String
81
192
consumerTokenSalt ) {
82
193
return Hashing .sha1 ().hashString (KEY_JOINER .join (consumerAppId , TIMESTAMP_FORMAT .format
83
194
(generationTime ), consumerTokenSalt ), Charsets .UTF_8 ).toString ();
84
195
}
85
196
197
+ ConsumerRole createConsumerRole (Long consumerId , Long roleId , String operator ) {
198
+ ConsumerRole consumerRole = new ConsumerRole ();
199
+
200
+ consumerRole .setConsumerId (consumerId );
201
+ consumerRole .setRoleId (roleId );
202
+ consumerRole .setDataChangeCreatedBy (operator );
203
+ consumerRole .setDataChangeLastModifiedBy (operator );
204
+
205
+ return consumerRole ;
206
+ }
207
+
86
208
}
0 commit comments