Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
apollo
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
apollo
Commits
7b7d753f
Commit
7b7d753f
authored
Aug 10, 2016
by
Jason Song
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add open api support
parent
872839c6
Changes
62
Show whitespace changes
Inline
Side-by-side
Showing
62 changed files
with
2006 additions
and
332 deletions
+2006
-332
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockAspect.java
...ramework/apollo/adminservice/aop/NamespaceLockAspect.java
+3
-1
apollo-assembly/src/main/java/com/ctrip/framework/apollo/assembly/ApolloApplication.java
...om/ctrip/framework/apollo/assembly/ApolloApplication.java
+0
-1
apollo-assembly/src/test/java/com/ctrip/framework/apollo/assembly/LocalApolloApplication.java
...rip/framework/apollo/assembly/LocalApolloApplication.java
+1
-1
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java
...rip/framework/apollo/biz/service/AppNamespaceService.java
+2
-2
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ReleaseMessageService.java
...p/framework/apollo/biz/service/ReleaseMessageService.java
+1
-1
apollo-common/pom.xml
apollo-common/pom.xml
+4
-0
apollo-common/src/main/java/com/ctrip/framework/apollo/common/controller/GlobalDefaultExceptionHandler.java
...ollo/common/controller/GlobalDefaultExceptionHandler.java
+74
-60
apollo-common/src/main/java/com/ctrip/framework/apollo/common/utils/RequestPrecondition.java
...ip/framework/apollo/common/utils/RequestPrecondition.java
+12
-4
apollo-core/src/main/java/com/ctrip/framework/apollo/core/enums/Env.java
.../main/java/com/ctrip/framework/apollo/core/enums/Env.java
+9
-1
apollo-portal/src/main/java/com/ctrip/framework/apollo/PortalApplication.java
...in/java/com/ctrip/framework/apollo/PortalApplication.java
+2
-3
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/auth/ConsumerPermissionValidator.java
...work/apollo/openapi/auth/ConsumerPermissionValidator.java
+37
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/dto/OpenItemDTO.java
...a/com/ctrip/framework/apollo/openapi/dto/OpenItemDTO.java
+46
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/dto/OpenNamespaceDTO.java
.../ctrip/framework/apollo/openapi/dto/OpenNamespaceDTO.java
+78
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/dto/OpenNamespaceLockDTO.java
...ip/framework/apollo/openapi/dto/OpenNamespaceLockDTO.java
+32
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/dto/OpenReleaseDTO.java
...om/ctrip/framework/apollo/openapi/dto/OpenReleaseDTO.java
+68
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/entity/Consumer.java
...a/com/ctrip/framework/apollo/openapi/entity/Consumer.java
+91
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/entity/ConsumerRole.java
...m/ctrip/framework/apollo/openapi/entity/ConsumerRole.java
+41
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/entity/ConsumerToken.java
.../ctrip/framework/apollo/openapi/entity/ConsumerToken.java
+54
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/filter/ConsumerAuthenticationFilter.java
...k/apollo/openapi/filter/ConsumerAuthenticationFilter.java
+55
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/repository/ConsumerRepository.java
...amework/apollo/openapi/repository/ConsumerRepository.java
+11
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/repository/ConsumerRoleRepository.java
...ork/apollo/openapi/repository/ConsumerRoleRepository.java
+24
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/repository/ConsumerTokenRepository.java
...rk/apollo/openapi/repository/ConsumerTokenRepository.java
+20
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/service/ConsumerRolePermissionService.java
...apollo/openapi/service/ConsumerRolePermissionService.java
+62
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/service/ConsumerService.java
...rip/framework/apollo/openapi/service/ConsumerService.java
+84
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/util/ConsumerAuthUtil.java
...ctrip/framework/apollo/openapi/util/ConsumerAuthUtil.java
+36
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/util/OpenApiBeanUtils.java
...ctrip/framework/apollo/openapi/util/OpenApiBeanUtils.java
+107
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ItemController.java
...ramework/apollo/openapi/v1/controller/ItemController.java
+107
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/NamespaceController.java
...ork/apollo/openapi/v1/controller/NamespaceController.java
+64
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ReleaseController.java
...ework/apollo/openapi/v1/controller/ReleaseController.java
+74
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java
...om/ctrip/framework/apollo/portal/api/AdminServiceAPI.java
+5
-2
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAddressLocator.java
...amework/apollo/portal/api/AdminServiceAddressLocator.java
+2
-2
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/auth/PermissionValidator.java
...rip/framework/apollo/portal/auth/PermissionValidator.java
+4
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/configuration/AuthConfiguration.java
...mework/apollo/portal/configuration/AuthConfiguration.java
+38
-18
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/AppController.java
...rip/framework/apollo/portal/controller/AppController.java
+5
-5
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ClusterController.java
...framework/apollo/portal/controller/ClusterController.java
+2
-2
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ConsumerController.java
...ramework/apollo/portal/controller/ConsumerController.java
+65
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ItemController.java
...ip/framework/apollo/portal/controller/ItemController.java
+6
-3
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/NamespaceController.java
...amework/apollo/portal/controller/NamespaceController.java
+4
-3
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/PermissionController.java
...mework/apollo/portal/controller/PermissionController.java
+5
-5
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ReleaseController.java
...framework/apollo/portal/controller/ReleaseController.java
+1
-1
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ServerConfigController.java
...work/apollo/portal/controller/ServerConfigController.java
+4
-2
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/entity/form/NamespaceReleaseModel.java
...work/apollo/portal/entity/form/NamespaceReleaseModel.java
+8
-0
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/entity/form/NamespaceSyncModel.java
...amework/apollo/portal/entity/form/NamespaceSyncModel.java
+6
-6
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/entity/vo/ItemDiffs.java
...om/ctrip/framework/apollo/portal/entity/vo/ItemDiffs.java
+4
-4
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/entity/vo/NamespaceIdentifier.java
...ramework/apollo/portal/entity/vo/NamespaceIdentifier.java
+1
-1
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java
...com/ctrip/framework/apollo/portal/service/AppService.java
+1
-1
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ItemService.java
...om/ctrip/framework/apollo/portal/service/ItemService.java
+31
-25
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java
...rip/framework/apollo/portal/service/NamespaceService.java
+21
-6
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ReleaseService.java
...ctrip/framework/apollo/portal/service/ReleaseService.java
+108
-95
apollo-portal/src/test/java/com/ctrip/framework/apollo/openapi/filter/ConsumerAuthenticationFilterTest.java
...ollo/openapi/filter/ConsumerAuthenticationFilterTest.java
+71
-0
apollo-portal/src/test/java/com/ctrip/framework/apollo/openapi/service/ConsumerRolePermissionServiceTest.java
...lo/openapi/service/ConsumerRolePermissionServiceTest.java
+49
-0
apollo-portal/src/test/java/com/ctrip/framework/apollo/openapi/service/ConsumerServiceTest.java
...framework/apollo/openapi/service/ConsumerServiceTest.java
+146
-0
apollo-portal/src/test/java/com/ctrip/framework/apollo/openapi/util/ConsumerAuthUtilTest.java
...p/framework/apollo/openapi/util/ConsumerAuthUtilTest.java
+79
-0
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractIntegrationTest.java
...trip/framework/apollo/portal/AbstractIntegrationTest.java
+2
-0
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AllTests.java
...test/java/com/ctrip/framework/apollo/portal/AllTests.java
+8
-1
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ServiceExceptionTest.java
...m/ctrip/framework/apollo/portal/ServiceExceptionTest.java
+43
-52
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/controller/ConsumerControllerTest.java
...work/apollo/portal/controller/ConsumerControllerTest.java
+59
-0
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/ConfigServiceTest.java
...ip/framework/apollo/portal/service/ConfigServiceTest.java
+13
-13
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/NamespaceServiceTest.java
...framework/apollo/portal/service/NamespaceServiceTest.java
+5
-5
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RoleInitializationServiceTest.java
.../apollo/portal/service/RoleInitializationServiceTest.java
+6
-5
apollo-portal/src/test/resources/sql/permission/insert-test-consumerroles.sql
...st/resources/sql/permission/insert-test-consumerroles.sql
+4
-0
pom.xml
pom.xml
+1
-1
No files found.
apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockAspect.java
View file @
7b7d753f
...
@@ -67,7 +67,9 @@ public class NamespaceLockAspect {
...
@@ -67,7 +67,9 @@ public class NamespaceLockAspect {
@Before
(
"@annotation(PreAcquireNamespaceLock) && args(itemId, operator, ..)"
)
@Before
(
"@annotation(PreAcquireNamespaceLock) && args(itemId, operator, ..)"
)
public
void
requireLockAdvice
(
long
itemId
,
String
operator
)
{
public
void
requireLockAdvice
(
long
itemId
,
String
operator
)
{
Item
item
=
itemService
.
findOne
(
itemId
);
Item
item
=
itemService
.
findOne
(
itemId
);
if
(
item
==
null
){
throw
new
BadRequestException
(
"item not exist."
);
}
acquireLock
(
item
.
getNamespaceId
(),
operator
);
acquireLock
(
item
.
getNamespaceId
(),
operator
);
}
}
...
...
apollo-assembly/src/main/java/com/ctrip/framework/apollo/assembly/ApolloApplication.java
View file @
7b7d753f
...
@@ -12,7 +12,6 @@ import org.springframework.context.ConfigurableApplicationContext;
...
@@ -12,7 +12,6 @@ import org.springframework.context.ConfigurableApplicationContext;
import
com.ctrip.framework.apollo.adminservice.AdminServiceApplication
;
import
com.ctrip.framework.apollo.adminservice.AdminServiceApplication
;
import
com.ctrip.framework.apollo.configservice.ConfigServiceApplication
;
import
com.ctrip.framework.apollo.configservice.ConfigServiceApplication
;
import
com.ctrip.framework.apollo.portal.PortalApplication
;
@SpringBootApplication
(
exclude
=
{
DataSourceAutoConfiguration
.
class
,
@SpringBootApplication
(
exclude
=
{
DataSourceAutoConfiguration
.
class
,
HibernateJpaAutoConfiguration
.
class
})
HibernateJpaAutoConfiguration
.
class
})
...
...
apollo-assembly/src/test/java/com/ctrip/framework/apollo/assembly/LocalApolloApplication.java
View file @
7b7d753f
...
@@ -12,7 +12,7 @@ import org.springframework.context.ConfigurableApplicationContext;
...
@@ -12,7 +12,7 @@ import org.springframework.context.ConfigurableApplicationContext;
import
com.ctrip.framework.apollo.adminservice.AdminServiceApplication
;
import
com.ctrip.framework.apollo.adminservice.AdminServiceApplication
;
import
com.ctrip.framework.apollo.configservice.ConfigServiceApplication
;
import
com.ctrip.framework.apollo.configservice.ConfigServiceApplication
;
import
com.ctrip.framework.apollo.
portal.
PortalApplication
;
import
com.ctrip.framework.apollo.PortalApplication
;
@SpringBootApplication
(
exclude
=
{
DataSourceAutoConfiguration
.
class
,
@SpringBootApplication
(
exclude
=
{
DataSourceAutoConfiguration
.
class
,
HibernateJpaAutoConfiguration
.
class
})
HibernateJpaAutoConfiguration
.
class
})
...
...
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/AppNamespaceService.java
View file @
7b7d753f
...
@@ -50,7 +50,7 @@ public class AppNamespaceService {
...
@@ -50,7 +50,7 @@ public class AppNamespaceService {
public
List
<
AppNamespace
>
findPublicNamespacesByNames
(
Set
<
String
>
namespaceNames
)
{
public
List
<
AppNamespace
>
findPublicNamespacesByNames
(
Set
<
String
>
namespaceNames
)
{
if
(
namespaceNames
==
null
||
namespaceNames
.
isEmpty
())
{
if
(
namespaceNames
==
null
||
namespaceNames
.
isEmpty
())
{
return
Collections
.
EMPTY_LIST
;
return
Collections
.
emptyList
()
;
}
}
return
appNamespaceRepository
.
findByNameInAndIsPublicTrue
(
namespaceNames
);
return
appNamespaceRepository
.
findByNameInAndIsPublicTrue
(
namespaceNames
);
...
@@ -68,7 +68,7 @@ public class AppNamespaceService {
...
@@ -68,7 +68,7 @@ public class AppNamespaceService {
public
List
<
AppNamespace
>
findByAppIdAndNamespaces
(
String
appId
,
Set
<
String
>
namespaceNames
)
{
public
List
<
AppNamespace
>
findByAppIdAndNamespaces
(
String
appId
,
Set
<
String
>
namespaceNames
)
{
Preconditions
.
checkArgument
(!
Strings
.
isNullOrEmpty
(
appId
),
"appId must not be null"
);
Preconditions
.
checkArgument
(!
Strings
.
isNullOrEmpty
(
appId
),
"appId must not be null"
);
if
(
namespaceNames
==
null
||
namespaceNames
.
isEmpty
())
{
if
(
namespaceNames
==
null
||
namespaceNames
.
isEmpty
())
{
return
Collections
.
EMPTY_LIST
;
return
Collections
.
emptyList
()
;
}
}
return
appNamespaceRepository
.
findByAppIdAndNameIn
(
appId
,
namespaceNames
);
return
appNamespaceRepository
.
findByAppIdAndNameIn
(
appId
,
namespaceNames
);
}
}
...
...
apollo-biz/src/main/java/com/ctrip/framework/apollo/biz/service/ReleaseMessageService.java
View file @
7b7d753f
...
@@ -32,7 +32,7 @@ public class ReleaseMessageService {
...
@@ -32,7 +32,7 @@ public class ReleaseMessageService {
public
List
<
ReleaseMessage
>
findLatestReleaseMessagesGroupByMessages
(
Collection
<
String
>
messages
)
{
public
List
<
ReleaseMessage
>
findLatestReleaseMessagesGroupByMessages
(
Collection
<
String
>
messages
)
{
if
(
CollectionUtils
.
isEmpty
(
messages
))
{
if
(
CollectionUtils
.
isEmpty
(
messages
))
{
return
Collections
.
EMPTY_LIST
;
return
Collections
.
emptyList
()
;
}
}
List
<
Object
[]>
result
=
List
<
Object
[]>
result
=
releaseMessageRepository
.
findLatestReleaseMessagesGroupByMessages
(
messages
);
releaseMessageRepository
.
findLatestReleaseMessagesGroupByMessages
(
messages
);
...
...
apollo-common/pom.xml
View file @
7b7d753f
...
@@ -54,5 +54,9 @@
...
@@ -54,5 +54,9 @@
<groupId>
ch.qos.logback
</groupId>
<groupId>
ch.qos.logback
</groupId>
<artifactId>
logback-classic
</artifactId>
<artifactId>
logback-classic
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
commons-lang
</groupId>
<artifactId>
commons-lang
</artifactId>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
apollo-common/src/main/java/com/ctrip/framework/apollo/common/controller/GlobalDefaultExceptionHandler.java
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
common
.
controller
;
package
com
.
ctrip
.
framework
.
apollo
.
common
.
controller
;
import
com.google.gson.Gson
;
import
com.google.gson.reflect.TypeToken
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpHeaders
;
...
@@ -15,6 +18,7 @@ import org.springframework.web.client.HttpStatusCodeException;
...
@@ -15,6 +18,7 @@ import org.springframework.web.client.HttpStatusCodeException;
import
com.ctrip.framework.apollo.common.exception.AbstractApolloHttpException
;
import
com.ctrip.framework.apollo.common.exception.AbstractApolloHttpException
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.Cat
;
import
java.lang.reflect.Type
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.time.format.DateTimeFormatter
;
import
java.util.HashMap
;
import
java.util.HashMap
;
...
@@ -24,12 +28,14 @@ import javax.servlet.ServletException;
...
@@ -24,12 +28,14 @@ import javax.servlet.ServletException;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
BAD_REQUEST
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
BAD_REQUEST
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
FORBIDDEN
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
INTERNAL_SERVER_ERROR
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
INTERNAL_SERVER_ERROR
;
import
static
org
.
springframework
.
http
.
HttpStatus
.
UNAUTHORIZED
;
import
static
org
.
springframework
.
http
.
MediaType
.
APPLICATION_JSON
;
import
static
org
.
springframework
.
http
.
MediaType
.
APPLICATION_JSON
;
@ControllerAdvice
@ControllerAdvice
public
class
GlobalDefaultExceptionHandler
{
public
class
GlobalDefaultExceptionHandler
{
private
Gson
gson
=
new
Gson
();
private
static
Type
mapType
=
new
TypeToken
<
Map
<
String
,
Object
>>()
{}.
getType
();
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
GlobalDefaultExceptionHandler
.
class
);
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
GlobalDefaultExceptionHandler
.
class
);
...
@@ -54,7 +60,7 @@ public class GlobalDefaultExceptionHandler {
...
@@ -54,7 +60,7 @@ public class GlobalDefaultExceptionHandler {
@ExceptionHandler
(
AccessDeniedException
.
class
)
@ExceptionHandler
(
AccessDeniedException
.
class
)
public
ResponseEntity
<
Map
<
String
,
Object
>>
accessDeny
(
HttpServletRequest
request
,
public
ResponseEntity
<
Map
<
String
,
Object
>>
accessDeny
(
HttpServletRequest
request
,
AccessDeniedException
ex
)
{
AccessDeniedException
ex
)
{
return
handleError
(
request
,
UNAUTHORIZED
,
ex
);
return
handleError
(
request
,
FORBIDDEN
,
ex
);
}
}
//处理自定义Exception
//处理自定义Exception
...
@@ -77,14 +83,22 @@ public class GlobalDefaultExceptionHandler {
...
@@ -77,14 +83,22 @@ public class GlobalDefaultExceptionHandler {
logger
.
error
(
message
,
ex
);
logger
.
error
(
message
,
ex
);
Cat
.
logError
(
ex
);
Cat
.
logError
(
ex
);
Map
<
String
,
Object
>
errorAttributes
=
new
HashMap
<>();
Map
<
String
,
Object
>
errorAttributes
=
new
HashMap
<>();
//如果是admin server引起的异常,则显示内部的异常信息
if
(
ex
instanceof
HttpStatusCodeException
){
errorAttributes
=
gson
.
fromJson
(((
HttpStatusCodeException
)
ex
).
getResponseBodyAsString
(),
mapType
);
status
=
((
HttpStatusCodeException
)
ex
).
getStatusCode
();
}
else
{
errorAttributes
.
put
(
"status"
,
status
.
value
());
errorAttributes
.
put
(
"status"
,
status
.
value
());
errorAttributes
.
put
(
"message"
,
message
);
errorAttributes
.
put
(
"message"
,
message
);
errorAttributes
.
put
(
"timestamp"
,
errorAttributes
.
put
(
"timestamp"
,
LocalDateTime
.
now
().
format
(
DateTimeFormatter
.
ISO_LOCAL_DATE_TIME
));
LocalDateTime
.
now
().
format
(
DateTimeFormatter
.
ISO_LOCAL_DATE_TIME
));
errorAttributes
.
put
(
"exception"
,
ex
.
getClass
().
getName
());
errorAttributes
.
put
(
"exception"
,
ex
.
getClass
().
getName
());
}
HttpHeaders
headers
=
new
HttpHeaders
();
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
APPLICATION_JSON
);
headers
.
setContentType
(
APPLICATION_JSON
);
return
new
ResponseEntity
<>(
errorAttributes
,
headers
,
status
);
return
new
ResponseEntity
<>(
errorAttributes
,
headers
,
status
);
...
...
apollo-common/src/main/java/com/ctrip/framework/apollo/common/utils/RequestPrecondition.java
View file @
7b7d753f
...
@@ -14,15 +14,15 @@ public class RequestPrecondition {
...
@@ -14,15 +14,15 @@ public class RequestPrecondition {
private
static
String
ILLEGAL_NUMBER
=
"number should be positive"
;
private
static
String
ILLEGAL_NUMBER
=
"number should be positive"
;
public
static
void
checkArgument
(
String
...
args
)
{
public
static
void
checkArgument
sNotEmpty
(
String
...
args
)
{
checkArgument
(!
StringUtils
.
isContainEmpty
(
args
),
CONTAIN_EMPTY_ARGUMENT
);
checkArgument
s
(!
StringUtils
.
isContainEmpty
(
args
),
CONTAIN_EMPTY_ARGUMENT
);
}
}
public
static
void
checkModel
(
boolean
valid
){
public
static
void
checkModel
(
boolean
valid
){
checkArgument
(
valid
,
ILLEGAL_MODEL
);
checkArgument
s
(
valid
,
ILLEGAL_MODEL
);
}
}
public
static
void
checkArgument
(
boolean
expression
,
Object
errorMessage
)
{
public
static
void
checkArgument
s
(
boolean
expression
,
Object
errorMessage
)
{
if
(!
expression
)
{
if
(!
expression
)
{
throw
new
BadRequestException
(
String
.
valueOf
(
errorMessage
));
throw
new
BadRequestException
(
String
.
valueOf
(
errorMessage
));
}
}
...
@@ -36,6 +36,14 @@ public class RequestPrecondition {
...
@@ -36,6 +36,14 @@ public class RequestPrecondition {
}
}
}
}
public
static
void
checkNumberPositive
(
long
...
args
){
for
(
long
num:
args
){
if
(
num
<=
0
){
throw
new
BadRequestException
(
ILLEGAL_NUMBER
);
}
}
}
public
static
void
checkNumberNotNegative
(
int
...
args
){
public
static
void
checkNumberNotNegative
(
int
...
args
){
for
(
int
num:
args
){
for
(
int
num:
args
){
if
(
num
<
0
){
if
(
num
<
0
){
...
...
apollo-core/src/main/java/com/ctrip/framework/apollo/core/enums/Env.java
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
core
.
enums
;
package
com
.
ctrip
.
framework
.
apollo
.
core
.
enums
;
import
com.google.common.base.Preconditions
;
/**
/**
* @author Jason Song(song_s@ctrip.com)
* @author Jason Song(song_s@ctrip.com)
*/
*/
public
enum
Env
{
public
enum
Env
{
LOCAL
,
DEV
,
FWS
,
FAT
,
UAT
,
LPT
,
PRO
,
TOOLS
LOCAL
,
DEV
,
FWS
,
FAT
,
UAT
,
LPT
,
PRO
,
TOOLS
;
public
static
Env
fromString
(
String
env
)
{
Env
environment
=
EnvUtils
.
transformEnv
(
env
);
Preconditions
.
checkArgument
(
environment
!=
null
,
String
.
format
(
"Env %s is invalid"
,
env
));
return
environment
;
}
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/
portal/
PortalApplication.java
→
apollo-portal/src/main/java/com/ctrip/framework/apollo/PortalApplication.java
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
portal
;
package
com
.
ctrip
.
framework
.
apollo
;
import
com.ctrip.framework.apollo.common.ApolloCommonConfig
;
import
com.ctrip.framework.apollo.common.ApolloCommonConfig
;
...
@@ -16,8 +16,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
...
@@ -16,8 +16,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@Configuration
@EnableAutoConfiguration
@EnableAutoConfiguration
@EnableTransactionManagement
@EnableTransactionManagement
@ComponentScan
(
basePackageClasses
=
{
ApolloCommonConfig
.
class
,
@ComponentScan
(
basePackageClasses
=
{
ApolloCommonConfig
.
class
,
PortalApplication
.
class
})
PortalApplication
.
class
})
public
class
PortalApplication
{
public
class
PortalApplication
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/auth/ConsumerPermissionValidator.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
auth
;
import
com.ctrip.framework.apollo.openapi.service.ConsumerRolePermissionService
;
import
com.ctrip.framework.apollo.openapi.util.ConsumerAuthUtil
;
import
com.ctrip.framework.apollo.portal.constant.PermissionType
;
import
com.ctrip.framework.apollo.portal.util.RoleUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
javax.servlet.http.HttpServletRequest
;
@Component
public
class
ConsumerPermissionValidator
{
@Autowired
private
ConsumerRolePermissionService
permissionService
;
@Autowired
private
ConsumerAuthUtil
consumerAuthUtil
;
public
boolean
hasModifyNamespacePermission
(
HttpServletRequest
request
,
String
appId
,
String
namespaceName
)
{
return
permissionService
.
consumerHasPermission
(
consumerAuthUtil
.
retrieveConsumerId
(
request
),
PermissionType
.
MODIFY_NAMESPACE
,
RoleUtils
.
buildNamespaceTargetId
(
appId
,
namespaceName
));
}
public
boolean
hasReleaseNamespacePermission
(
HttpServletRequest
request
,
String
appId
,
String
namespaceName
)
{
return
permissionService
.
consumerHasPermission
(
consumerAuthUtil
.
retrieveConsumerId
(
request
),
PermissionType
.
RELEASE_NAMESPACE
,
RoleUtils
.
buildNamespaceTargetId
(
appId
,
namespaceName
));
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/dto/OpenItemDTO.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
dto
;
import
com.ctrip.framework.apollo.common.dto.BaseDTO
;
public
class
OpenItemDTO
extends
BaseDTO
{
private
long
id
;
private
String
key
;
private
String
value
;
private
String
comment
;
public
long
getId
()
{
return
id
;
}
public
void
setId
(
long
id
)
{
this
.
id
=
id
;
}
public
String
getKey
()
{
return
key
;
}
public
void
setKey
(
String
key
)
{
this
.
key
=
key
;
}
public
String
getValue
()
{
return
value
;
}
public
void
setValue
(
String
value
)
{
this
.
value
=
value
;
}
public
String
getComment
()
{
return
comment
;
}
public
void
setComment
(
String
comment
)
{
this
.
comment
=
comment
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/dto/OpenNamespaceDTO.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
dto
;
import
com.ctrip.framework.apollo.common.dto.BaseDTO
;
import
java.util.List
;
public
class
OpenNamespaceDTO
extends
BaseDTO
{
private
String
appId
;
private
String
clusterName
;
private
String
namespaceName
;
private
String
comment
;
private
String
format
;
private
boolean
isPublic
;
private
List
<
OpenItemDTO
>
items
;
public
String
getAppId
()
{
return
appId
;
}
public
void
setAppId
(
String
appId
)
{
this
.
appId
=
appId
;
}
public
String
getClusterName
()
{
return
clusterName
;
}
public
void
setClusterName
(
String
clusterName
)
{
this
.
clusterName
=
clusterName
;
}
public
String
getNamespaceName
()
{
return
namespaceName
;
}
public
void
setNamespaceName
(
String
namespaceName
)
{
this
.
namespaceName
=
namespaceName
;
}
public
String
getComment
()
{
return
comment
;
}
public
void
setComment
(
String
comment
)
{
this
.
comment
=
comment
;
}
public
String
getFormat
()
{
return
format
;
}
public
void
setFormat
(
String
format
)
{
this
.
format
=
format
;
}
public
boolean
isPublic
()
{
return
isPublic
;
}
public
void
setPublic
(
boolean
aPublic
)
{
isPublic
=
aPublic
;
}
public
List
<
OpenItemDTO
>
getItems
()
{
return
items
;
}
public
void
setItems
(
List
<
OpenItemDTO
>
items
)
{
this
.
items
=
items
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/dto/OpenNamespaceLockDTO.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
dto
;
public
class
OpenNamespaceLockDTO
{
private
String
namespaceName
;
private
boolean
isLocked
;
private
String
lockedBy
;
public
String
getNamespaceName
()
{
return
namespaceName
;
}
public
void
setNamespaceName
(
String
namespaceName
)
{
this
.
namespaceName
=
namespaceName
;
}
public
boolean
isLocked
()
{
return
isLocked
;
}
public
void
setLocked
(
boolean
locked
)
{
isLocked
=
locked
;
}
public
String
getLockedBy
()
{
return
lockedBy
;
}
public
void
setLockedBy
(
String
lockedBy
)
{
this
.
lockedBy
=
lockedBy
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/dto/OpenReleaseDTO.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
dto
;
import
com.ctrip.framework.apollo.common.dto.BaseDTO
;
import
java.util.Map
;
public
class
OpenReleaseDTO
extends
BaseDTO
{
private
String
appId
;
private
String
clusterName
;
private
String
namespaceName
;
private
String
name
;
private
Map
<
String
,
String
>
configurations
;
private
String
comment
;
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getAppId
()
{
return
appId
;
}
public
void
setAppId
(
String
appId
)
{
this
.
appId
=
appId
;
}
public
String
getClusterName
()
{
return
clusterName
;
}
public
void
setClusterName
(
String
clusterName
)
{
this
.
clusterName
=
clusterName
;
}
public
String
getNamespaceName
()
{
return
namespaceName
;
}
public
void
setNamespaceName
(
String
namespaceName
)
{
this
.
namespaceName
=
namespaceName
;
}
public
Map
<
String
,
String
>
getConfigurations
()
{
return
configurations
;
}
public
void
setConfigurations
(
Map
<
String
,
String
>
configurations
)
{
this
.
configurations
=
configurations
;
}
public
String
getComment
()
{
return
comment
;
}
public
void
setComment
(
String
comment
)
{
this
.
comment
=
comment
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/entity/Consumer.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
entity
;
import
com.ctrip.framework.apollo.common.entity.BaseEntity
;
import
org.hibernate.annotations.SQLDelete
;
import
org.hibernate.annotations.Where
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.Table
;
@Entity
@Table
(
name
=
"Consumer"
)
@SQLDelete
(
sql
=
"Update Consumer set isDeleted = 1 where id = ?"
)
@Where
(
clause
=
"isDeleted = 0"
)
public
class
Consumer
extends
BaseEntity
{
@Column
(
name
=
"Name"
,
nullable
=
false
)
private
String
name
;
@Column
(
name
=
"AppId"
,
nullable
=
false
)
private
String
appId
;
@Column
(
name
=
"OrgId"
,
nullable
=
false
)
private
String
orgId
;
@Column
(
name
=
"OrgName"
,
nullable
=
false
)
private
String
orgName
;
@Column
(
name
=
"OwnerName"
,
nullable
=
false
)
private
String
ownerName
;
@Column
(
name
=
"OwnerEmail"
,
nullable
=
false
)
private
String
ownerEmail
;
public
String
getAppId
()
{
return
appId
;
}
public
String
getName
()
{
return
name
;
}
public
String
getOrgId
()
{
return
orgId
;
}
public
String
getOrgName
()
{
return
orgName
;
}
public
String
getOwnerEmail
()
{
return
ownerEmail
;
}
public
String
getOwnerName
()
{
return
ownerName
;
}
public
void
setAppId
(
String
appId
)
{
this
.
appId
=
appId
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
void
setOrgId
(
String
orgId
)
{
this
.
orgId
=
orgId
;
}
public
void
setOrgName
(
String
orgName
)
{
this
.
orgName
=
orgName
;
}
public
void
setOwnerEmail
(
String
ownerEmail
)
{
this
.
ownerEmail
=
ownerEmail
;
}
public
void
setOwnerName
(
String
ownerName
)
{
this
.
ownerName
=
ownerName
;
}
public
String
toString
()
{
return
toStringHelper
().
add
(
"name"
,
name
).
add
(
"appId"
,
appId
)
.
add
(
"orgId"
,
orgId
)
.
add
(
"orgName"
,
orgName
)
.
add
(
"ownerName"
,
ownerName
)
.
add
(
"ownerEmail"
,
ownerEmail
).
toString
();
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/entity/ConsumerRole.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
entity
;
import
com.ctrip.framework.apollo.common.entity.BaseEntity
;
import
org.hibernate.annotations.SQLDelete
;
import
org.hibernate.annotations.Where
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.Table
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@Entity
@Table
(
name
=
"ConsumerRole"
)
@SQLDelete
(
sql
=
"Update ConsumerRole set isDeleted = 1 where id = ?"
)
@Where
(
clause
=
"isDeleted = 0"
)
public
class
ConsumerRole
extends
BaseEntity
{
@Column
(
name
=
"ConsumerId"
,
nullable
=
false
)
private
long
consumerId
;
@Column
(
name
=
"RoleId"
,
nullable
=
false
)
private
long
roleId
;
public
long
getConsumerId
()
{
return
consumerId
;
}
public
void
setConsumerId
(
long
consumerId
)
{
this
.
consumerId
=
consumerId
;
}
public
long
getRoleId
()
{
return
roleId
;
}
public
void
setRoleId
(
long
roleId
)
{
this
.
roleId
=
roleId
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/entity/ConsumerToken.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
entity
;
import
com.ctrip.framework.apollo.common.entity.BaseEntity
;
import
org.hibernate.annotations.SQLDelete
;
import
org.hibernate.annotations.Where
;
import
java.util.Date
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.Table
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@Entity
@Table
(
name
=
"ConsumerToken"
)
@SQLDelete
(
sql
=
"Update ConsumerToken set isDeleted = 1 where id = ?"
)
@Where
(
clause
=
"isDeleted = 0"
)
public
class
ConsumerToken
extends
BaseEntity
{
@Column
(
name
=
"ConsumerId"
,
nullable
=
false
)
private
long
consumerId
;
@Column
(
name
=
"token"
,
nullable
=
false
)
private
String
token
;
@Column
(
name
=
"Expires"
,
nullable
=
false
)
private
Date
expires
;
public
long
getConsumerId
()
{
return
consumerId
;
}
public
void
setConsumerId
(
long
consumerId
)
{
this
.
consumerId
=
consumerId
;
}
public
String
getToken
()
{
return
token
;
}
public
void
setToken
(
String
token
)
{
this
.
token
=
token
;
}
public
Date
getExpires
()
{
return
expires
;
}
public
void
setExpires
(
Date
expires
)
{
this
.
expires
=
expires
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/filter/ConsumerAuthenticationFilter.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
filter
;
import
com.ctrip.framework.apollo.openapi.util.ConsumerAuthUtil
;
import
java.io.IOException
;
import
javax.servlet.Filter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.FilterConfig
;
import
javax.servlet.ServletException
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletResponse
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public
class
ConsumerAuthenticationFilter
implements
Filter
{
private
ConsumerAuthUtil
consumerAuthUtil
;
public
ConsumerAuthenticationFilter
(
ConsumerAuthUtil
consumerAuthUtil
)
{
this
.
consumerAuthUtil
=
consumerAuthUtil
;
}
@Override
public
void
init
(
FilterConfig
filterConfig
)
throws
ServletException
{
//nothing
}
@Override
public
void
doFilter
(
ServletRequest
req
,
ServletResponse
resp
,
FilterChain
chain
)
throws
IOException
,
ServletException
{
HttpServletRequest
request
=
(
HttpServletRequest
)
req
;
HttpServletResponse
response
=
(
HttpServletResponse
)
resp
;
String
token
=
request
.
getHeader
(
"Authorization"
);
Long
consumerId
=
consumerAuthUtil
.
getConsumerId
(
token
);
if
(
consumerId
==
null
)
{
response
.
sendError
(
HttpServletResponse
.
SC_UNAUTHORIZED
,
"Unauthorized"
);
return
;
}
consumerAuthUtil
.
storeConsumerId
(
request
,
consumerId
);
chain
.
doFilter
(
req
,
resp
);
}
@Override
public
void
destroy
()
{
//nothing
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/repository/ConsumerRepository.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
repository
;
import
com.ctrip.framework.apollo.openapi.entity.Consumer
;
import
org.springframework.data.repository.PagingAndSortingRepository
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public
interface
ConsumerRepository
extends
PagingAndSortingRepository
<
Consumer
,
Long
>
{
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/repository/ConsumerRoleRepository.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
repository
;
import
com.ctrip.framework.apollo.openapi.entity.ConsumerRole
;
import
org.springframework.data.repository.PagingAndSortingRepository
;
import
java.util.List
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public
interface
ConsumerRoleRepository
extends
PagingAndSortingRepository
<
ConsumerRole
,
Long
>
{
/**
* find consumer roles by userId
*
* @param consumerId consumer id
*/
List
<
ConsumerRole
>
findByConsumerId
(
long
consumerId
);
/**
* find consumer roles by roleId
*/
List
<
ConsumerRole
>
findByRoleId
(
long
roleId
);
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/repository/ConsumerTokenRepository.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
repository
;
import
com.ctrip.framework.apollo.openapi.entity.ConsumerToken
;
import
org.springframework.data.repository.PagingAndSortingRepository
;
import
java.util.Date
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public
interface
ConsumerTokenRepository
extends
PagingAndSortingRepository
<
ConsumerToken
,
Long
>
{
/**
* find consumer token by token
*
* @param token the token
* @param validDate the date when the token is valid
*/
ConsumerToken
findTopByTokenAndExpiresAfter
(
String
token
,
Date
validDate
);
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/service/ConsumerRolePermissionService.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
service
;
import
com.google.common.collect.FluentIterable
;
import
com.ctrip.framework.apollo.openapi.entity.ConsumerRole
;
import
com.ctrip.framework.apollo.openapi.repository.ConsumerRoleRepository
;
import
com.ctrip.framework.apollo.portal.entity.po.Permission
;
import
com.ctrip.framework.apollo.portal.entity.po.RolePermission
;
import
com.ctrip.framework.apollo.portal.repository.PermissionRepository
;
import
com.ctrip.framework.apollo.portal.repository.RolePermissionRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.Set
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@Service
public
class
ConsumerRolePermissionService
{
@Autowired
private
PermissionRepository
permissionRepository
;
@Autowired
private
ConsumerRoleRepository
consumerRoleRepository
;
@Autowired
private
RolePermissionRepository
rolePermissionRepository
;
/**
* Check whether user has the permission
*/
public
boolean
consumerHasPermission
(
long
consumerId
,
String
permissionType
,
String
targetId
)
{
Permission
permission
=
permissionRepository
.
findTopByPermissionTypeAndTargetId
(
permissionType
,
targetId
);
if
(
permission
==
null
)
{
return
false
;
}
List
<
ConsumerRole
>
consumerRoles
=
consumerRoleRepository
.
findByConsumerId
(
consumerId
);
if
(
CollectionUtils
.
isEmpty
(
consumerRoles
))
{
return
false
;
}
Set
<
Long
>
roleIds
=
FluentIterable
.
from
(
consumerRoles
).
transform
(
consumerRole
->
consumerRole
.
getRoleId
())
.
toSet
();
List
<
RolePermission
>
rolePermissions
=
rolePermissionRepository
.
findByRoleIdIn
(
roleIds
);
if
(
CollectionUtils
.
isEmpty
(
rolePermissions
))
{
return
false
;
}
for
(
RolePermission
rolePermission
:
rolePermissions
)
{
if
(
rolePermission
.
getPermissionId
()
==
permission
.
getId
())
{
return
true
;
}
}
return
false
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/service/ConsumerService.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
service
;
import
com.google.common.base.Charsets
;
import
com.google.common.base.Joiner
;
import
com.google.common.base.Preconditions
;
import
com.google.common.base.Strings
;
import
com.google.common.hash.Hashing
;
import
com.ctrip.framework.apollo.openapi.entity.Consumer
;
import
com.ctrip.framework.apollo.openapi.entity.ConsumerToken
;
import
com.ctrip.framework.apollo.openapi.repository.ConsumerRepository
;
import
com.ctrip.framework.apollo.openapi.repository.ConsumerTokenRepository
;
import
com.ctrip.framework.apollo.portal.service.ServerConfigService
;
import
org.apache.commons.lang.time.FastDateFormat
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.Date
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@Service
public
class
ConsumerService
implements
InitializingBean
{
static
final
String
TOKEN_SALT_KEY
=
"consumer.token.salt"
;
private
static
final
FastDateFormat
TIMESTAMP_FORMAT
=
FastDateFormat
.
getInstance
(
"yyyyMMddHHmmss"
);
private
static
final
Joiner
KEY_JOINER
=
Joiner
.
on
(
"|"
);
@Autowired
private
ConsumerTokenRepository
consumerTokenRepository
;
@Autowired
private
ConsumerRepository
consumerRepository
;
@Autowired
private
ServerConfigService
serverConfigService
;
private
String
consumerTokenSalt
;
public
Long
getConsumerIdByToken
(
String
token
)
{
if
(
Strings
.
isNullOrEmpty
(
token
))
{
return
null
;
}
ConsumerToken
consumerToken
=
consumerTokenRepository
.
findTopByTokenAndExpiresAfter
(
token
,
new
Date
());
return
consumerToken
==
null
?
null
:
consumerToken
.
getConsumerId
();
}
public
Consumer
getConsumerByConsumerId
(
long
consumerId
)
{
return
consumerRepository
.
findOne
(
consumerId
);
}
public
void
generateAndEnrichConsumerToken
(
ConsumerToken
consumerToken
)
{
Consumer
consumer
=
getConsumerByConsumerId
(
consumerToken
.
getConsumerId
());
Preconditions
.
checkState
(
consumer
!=
null
,
String
.
format
(
"Consumer with id: %d not found!"
,
consumerToken
.
getConsumerId
()));
if
(
consumerToken
.
getDataChangeCreatedTime
()
==
null
)
{
consumerToken
.
setDataChangeCreatedTime
(
new
Date
());
}
consumerToken
.
setToken
(
generateConsumerToken
(
consumer
.
getAppId
(),
consumerToken
.
getDataChangeCreatedTime
(),
consumerTokenSalt
));
}
@Transactional
public
ConsumerToken
createConsumerToken
(
ConsumerToken
entity
)
{
entity
.
setId
(
0
);
//for protection
return
consumerTokenRepository
.
save
(
entity
);
}
String
generateConsumerToken
(
String
consumerAppId
,
Date
generationTime
,
String
consumerTokenSalt
)
{
return
Hashing
.
sha1
().
hashString
(
KEY_JOINER
.
join
(
consumerAppId
,
TIMESTAMP_FORMAT
.
format
(
generationTime
),
consumerTokenSalt
),
Charsets
.
UTF_8
).
toString
();
}
@Override
public
void
afterPropertiesSet
()
throws
Exception
{
consumerTokenSalt
=
serverConfigService
.
getValue
(
TOKEN_SALT_KEY
,
"apollo-portal"
);
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/util/ConsumerAuthUtil.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
util
;
import
com.ctrip.framework.apollo.openapi.service.ConsumerService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
javax.servlet.http.HttpServletRequest
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@Service
public
class
ConsumerAuthUtil
{
static
final
String
CONSUMER_ID
=
"ApolloConsumerId"
;
@Autowired
private
ConsumerService
consumerService
;
public
Long
getConsumerId
(
String
token
)
{
return
consumerService
.
getConsumerIdByToken
(
token
);
}
public
void
storeConsumerId
(
HttpServletRequest
request
,
Long
consumerId
)
{
request
.
setAttribute
(
CONSUMER_ID
,
consumerId
);
}
public
long
retrieveConsumerId
(
HttpServletRequest
request
)
{
Object
value
=
request
.
getAttribute
(
CONSUMER_ID
);
try
{
return
Long
.
parseLong
(
value
.
toString
());
}
catch
(
Throwable
ex
)
{
throw
new
IllegalStateException
(
"No consumer id!"
,
ex
);
}
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/util/OpenApiBeanUtils.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
util
;
import
com.google.common.base.Preconditions
;
import
com.google.common.reflect.TypeToken
;
import
com.google.gson.Gson
;
import
com.ctrip.framework.apollo.common.dto.ItemDTO
;
import
com.ctrip.framework.apollo.common.dto.NamespaceLockDTO
;
import
com.ctrip.framework.apollo.common.dto.ReleaseDTO
;
import
com.ctrip.framework.apollo.common.utils.BeanUtils
;
import
com.ctrip.framework.apollo.openapi.dto.OpenItemDTO
;
import
com.ctrip.framework.apollo.openapi.dto.OpenNamespaceDTO
;
import
com.ctrip.framework.apollo.openapi.dto.OpenNamespaceLockDTO
;
import
com.ctrip.framework.apollo.openapi.dto.OpenReleaseDTO
;
import
com.ctrip.framework.apollo.portal.entity.vo.NamespaceVO
;
import
org.springframework.util.CollectionUtils
;
import
java.lang.reflect.Type
;
import
java.util.Collections
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
public
class
OpenApiBeanUtils
{
private
static
Gson
gson
=
new
Gson
();
private
static
Type
type
=
new
TypeToken
<
Map
<
String
,
String
>>()
{
}.
getType
();
public
static
OpenItemDTO
transformFromItemDTO
(
ItemDTO
item
)
{
Preconditions
.
checkArgument
(
item
!=
null
);
return
BeanUtils
.
transfrom
(
OpenItemDTO
.
class
,
item
);
}
public
static
ItemDTO
transformToItemDTO
(
OpenItemDTO
openItemDTO
)
{
Preconditions
.
checkArgument
(
openItemDTO
!=
null
);
return
BeanUtils
.
transfrom
(
ItemDTO
.
class
,
openItemDTO
);
}
public
static
OpenReleaseDTO
transformFromReleaseDTO
(
ReleaseDTO
release
)
{
Preconditions
.
checkArgument
(
release
!=
null
);
OpenReleaseDTO
openReleaseDTO
=
BeanUtils
.
transfrom
(
OpenReleaseDTO
.
class
,
release
);
Map
<
String
,
String
>
configs
=
gson
.
fromJson
(
release
.
getConfigurations
(),
type
);
openReleaseDTO
.
setConfigurations
(
configs
);
return
openReleaseDTO
;
}
public
static
OpenNamespaceDTO
transformFromNamespaceVO
(
NamespaceVO
namespaceVO
)
{
Preconditions
.
checkArgument
(
namespaceVO
!=
null
);
OpenNamespaceDTO
openNamespaceDTO
=
BeanUtils
.
transfrom
(
OpenNamespaceDTO
.
class
,
namespaceVO
.
getBaseInfo
());
//app namespace info
openNamespaceDTO
.
setFormat
(
namespaceVO
.
getFormat
());
openNamespaceDTO
.
setComment
(
namespaceVO
.
getComment
());
openNamespaceDTO
.
setPublic
(
namespaceVO
.
isPublic
());
//items
List
<
OpenItemDTO
>
items
=
new
LinkedList
<>();
List
<
NamespaceVO
.
ItemVO
>
itemVOs
=
namespaceVO
.
getItems
();
if
(!
CollectionUtils
.
isEmpty
(
itemVOs
))
{
items
.
addAll
(
itemVOs
.
stream
().
map
(
itemVO
->
transformFromItemDTO
(
itemVO
.
getItem
())).
collect
(
Collectors
.
toList
()));
}
openNamespaceDTO
.
setItems
(
items
);
return
openNamespaceDTO
;
}
public
static
List
<
OpenNamespaceDTO
>
batchTransformFromNamespaceVOs
(
List
<
NamespaceVO
>
namespaceVOs
)
{
if
(
CollectionUtils
.
isEmpty
(
namespaceVOs
))
{
return
Collections
.
emptyList
();
}
List
<
OpenNamespaceDTO
>
openNamespaceDTOs
=
namespaceVOs
.
stream
().
map
(
OpenApiBeanUtils:
:
transformFromNamespaceVO
)
.
collect
(
Collectors
.
toCollection
(
LinkedList:
:
new
));
return
openNamespaceDTOs
;
}
public
static
OpenNamespaceLockDTO
transformFromNamespaceLockDTO
(
String
namespaceName
,
NamespaceLockDTO
namespaceLock
)
{
OpenNamespaceLockDTO
lock
=
new
OpenNamespaceLockDTO
();
lock
.
setNamespaceName
(
namespaceName
);
if
(
namespaceLock
==
null
)
{
lock
.
setLocked
(
false
);
}
else
{
lock
.
setLocked
(
true
);
lock
.
setLockedBy
(
namespaceLock
.
getDataChangeCreatedBy
());
}
return
lock
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ItemController.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
v1
.
controller
;
import
com.ctrip.framework.apollo.common.dto.ItemDTO
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.common.utils.RequestPrecondition
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
com.ctrip.framework.apollo.openapi.dto.OpenItemDTO
;
import
com.ctrip.framework.apollo.openapi.util.OpenApiBeanUtils
;
import
com.ctrip.framework.apollo.portal.service.ItemService
;
import
com.ctrip.framework.apollo.portal.service.UserService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
@RestController
(
"openapiItemController"
)
@RequestMapping
(
"/openapi/v1/envs/{env}"
)
public
class
ItemController
{
@Autowired
private
ItemService
itemService
;
@Autowired
private
UserService
userService
;
@PreAuthorize
(
value
=
"@consumerPermissionValidator.hasModifyNamespacePermission(#request, #appId, #namespaceName)"
)
@RequestMapping
(
value
=
"/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items"
,
method
=
RequestMethod
.
POST
)
public
OpenItemDTO
createItem
(
@PathVariable
String
appId
,
@PathVariable
String
env
,
@PathVariable
String
clusterName
,
@PathVariable
String
namespaceName
,
@RequestBody
OpenItemDTO
item
,
HttpServletRequest
request
)
{
RequestPrecondition
.
checkArguments
(
!
StringUtils
.
isContainEmpty
(
item
.
getKey
(),
item
.
getValue
(),
item
.
getDataChangeCreatedBy
()),
"key,value,dataChangeCreatedBy 字段不能为空"
);
if
(
userService
.
findByUserId
(
item
.
getDataChangeCreatedBy
())
==
null
)
{
throw
new
BadRequestException
(
"用户不存在."
);
}
ItemDTO
toCreate
=
OpenApiBeanUtils
.
transformToItemDTO
(
item
);
//protect
toCreate
.
setLineNum
(
0
);
toCreate
.
setId
(
0
);
toCreate
.
setDataChangeLastModifiedBy
(
toCreate
.
getDataChangeCreatedBy
());
ItemDTO
createdItem
=
itemService
.
createItem
(
appId
,
Env
.
fromString
(
env
),
clusterName
,
namespaceName
,
toCreate
);
return
OpenApiBeanUtils
.
transformFromItemDTO
(
createdItem
);
}
@PreAuthorize
(
value
=
"@consumerPermissionValidator.hasModifyNamespacePermission(#request, #appId, #namespaceName)"
)
@RequestMapping
(
value
=
"/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items/{itemId}"
,
method
=
RequestMethod
.
PUT
)
public
void
updateItem
(
@PathVariable
String
appId
,
@PathVariable
String
env
,
@PathVariable
String
clusterName
,
@PathVariable
String
namespaceName
,
@PathVariable
long
itemId
,
@RequestBody
OpenItemDTO
item
,
HttpServletRequest
request
)
{
RequestPrecondition
.
checkArguments
(
item
!=
null
&&
item
.
getId
()
>
0
&&
itemId
==
item
.
getId
(),
"item data error"
);
RequestPrecondition
.
checkArguments
(
!
StringUtils
.
isContainEmpty
(
item
.
getKey
(),
item
.
getValue
(),
item
.
getDataChangeLastModifiedBy
()),
"key,value,dataChangeLastModifiedBy 字段不能为空"
);
if
(
userService
.
findByUserId
(
item
.
getDataChangeLastModifiedBy
())
==
null
)
{
throw
new
BadRequestException
(
"用户不存在."
);
}
ItemDTO
toUpdateItem
=
itemService
.
loadItem
(
Env
.
fromString
(
env
),
itemId
);
if
(
toUpdateItem
==
null
)
{
throw
new
BadRequestException
(
"item not exist"
);
}
//protect. only value,comment,lastModifiedBy can be modified
toUpdateItem
.
setComment
(
item
.
getComment
());
toUpdateItem
.
setValue
(
item
.
getValue
());
toUpdateItem
.
setDataChangeLastModifiedBy
(
item
.
getDataChangeLastModifiedBy
());
itemService
.
updateItem
(
appId
,
Env
.
fromString
(
env
),
clusterName
,
namespaceName
,
toUpdateItem
);
}
@PreAuthorize
(
value
=
"@consumerPermissionValidator.hasModifyNamespacePermission(#request, #appId, #namespaceName)"
)
@RequestMapping
(
value
=
"/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items/{itemId}"
,
method
=
RequestMethod
.
DELETE
)
public
void
deleteItem
(
@PathVariable
String
appId
,
@PathVariable
String
env
,
@PathVariable
String
clusterName
,
@PathVariable
String
namespaceName
,
@PathVariable
long
itemId
,
@RequestParam
String
operator
,
HttpServletRequest
request
)
{
if
(
userService
.
findByUserId
(
operator
)
==
null
)
{
throw
new
BadRequestException
(
"用户不存在."
);
}
itemService
.
deleteItem
(
Env
.
fromString
(
env
),
itemId
,
operator
);
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/NamespaceController.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
v1
.
controller
;
import
com.ctrip.framework.apollo.common.dto.NamespaceDTO
;
import
com.ctrip.framework.apollo.common.dto.NamespaceLockDTO
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.openapi.dto.OpenNamespaceDTO
;
import
com.ctrip.framework.apollo.openapi.dto.OpenNamespaceLockDTO
;
import
com.ctrip.framework.apollo.openapi.util.OpenApiBeanUtils
;
import
com.ctrip.framework.apollo.portal.entity.vo.NamespaceVO
;
import
com.ctrip.framework.apollo.portal.service.NamespaceLockService
;
import
com.ctrip.framework.apollo.portal.service.NamespaceService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
@RestController
(
"openapiNamespaceController"
)
@RequestMapping
(
"/openapi/v1/envs/{env}"
)
public
class
NamespaceController
{
@Autowired
private
NamespaceLockService
namespaceLockService
;
@Autowired
private
NamespaceService
namespaceService
;
@RequestMapping
(
value
=
"/apps/{appId}/clusters/{clusterName}/namespaces"
,
method
=
RequestMethod
.
GET
)
public
List
<
OpenNamespaceDTO
>
findNamespaces
(
@PathVariable
String
appId
,
@PathVariable
String
env
,
@PathVariable
String
clusterName
)
{
return
OpenApiBeanUtils
.
batchTransformFromNamespaceVOs
(
namespaceService
.
findNamespaces
(
appId
,
Env
.
fromString
(
env
),
clusterName
));
}
@RequestMapping
(
value
=
"/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName:.+}"
,
method
=
RequestMethod
.
GET
)
public
OpenNamespaceDTO
loadNamespace
(
@PathVariable
String
appId
,
@PathVariable
String
env
,
@PathVariable
String
clusterName
,
@PathVariable
String
namespaceName
)
{
NamespaceVO
namespaceVO
=
namespaceService
.
loadNamespace
(
appId
,
Env
.
fromString
(
env
),
clusterName
,
namespaceName
);
if
(
namespaceVO
==
null
)
{
return
null
;
}
return
OpenApiBeanUtils
.
transformFromNamespaceVO
(
namespaceVO
);
}
@RequestMapping
(
value
=
"/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/lock"
,
method
=
RequestMethod
.
GET
)
public
OpenNamespaceLockDTO
getNamespaceLock
(
@PathVariable
String
appId
,
@PathVariable
String
env
,
@PathVariable
String
clusterName
,
@PathVariable
String
namespaceName
)
{
NamespaceDTO
namespace
=
namespaceService
.
loadNamespaceBaseInfo
(
appId
,
Env
.
fromString
(
env
),
clusterName
,
namespaceName
);
NamespaceLockDTO
lockDTO
=
namespaceLockService
.
getNamespaceLock
(
appId
,
Env
.
fromString
(
env
),
clusterName
,
namespaceName
);
return
OpenApiBeanUtils
.
transformFromNamespaceLockDTO
(
namespace
.
getNamespaceName
(),
lockDTO
);
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/openapi/v1/controller/ReleaseController.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
v1
.
controller
;
import
com.ctrip.framework.apollo.common.dto.ReleaseDTO
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.common.utils.RequestPrecondition
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
com.ctrip.framework.apollo.openapi.dto.OpenReleaseDTO
;
import
com.ctrip.framework.apollo.openapi.util.OpenApiBeanUtils
;
import
com.ctrip.framework.apollo.portal.entity.form.NamespaceReleaseModel
;
import
com.ctrip.framework.apollo.portal.service.ReleaseService
;
import
com.ctrip.framework.apollo.portal.service.UserService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkModel
;
@RestController
(
"openapiReleaseController"
)
@RequestMapping
(
"/openapi/v1/envs/{env}"
)
public
class
ReleaseController
{
@Autowired
private
ReleaseService
releaseService
;
@Autowired
private
UserService
userService
;
@PreAuthorize
(
value
=
"@consumerPermissionValidator.hasReleaseNamespacePermission(#request, #appId, #namespaceName)"
)
@RequestMapping
(
value
=
"/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/releases"
,
method
=
RequestMethod
.
POST
)
public
OpenReleaseDTO
createRelease
(
@PathVariable
String
appId
,
@PathVariable
String
env
,
@PathVariable
String
clusterName
,
@PathVariable
String
namespaceName
,
@RequestBody
NamespaceReleaseModel
model
,
HttpServletRequest
request
)
{
checkModel
(
model
!=
null
);
RequestPrecondition
.
checkArguments
(!
StringUtils
.
isContainEmpty
(
model
.
getReleaseBy
(),
model
.
getReleaseTitle
()),
"releaseTitle and releaseBy can not be empty"
);
if
(
userService
.
findByUserId
(
model
.
getReleaseBy
())
==
null
)
{
throw
new
BadRequestException
(
"用户不存在."
);
}
model
.
setAppId
(
appId
);
model
.
setEnv
(
Env
.
fromString
(
env
).
toString
());
model
.
setClusterName
(
clusterName
);
model
.
setNamespaceName
(
namespaceName
);
return
OpenApiBeanUtils
.
transformFromReleaseDTO
(
releaseService
.
createRelease
(
model
));
}
@RequestMapping
(
value
=
"/apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/releases/latest"
,
method
=
RequestMethod
.
GET
)
public
OpenReleaseDTO
loadLatestActiveRelease
(
@PathVariable
String
appId
,
@PathVariable
String
env
,
@PathVariable
String
clusterName
,
@PathVariable
String
namespaceName
)
{
ReleaseDTO
releaseDTO
=
releaseService
.
loadLatestRelease
(
appId
,
Env
.
fromString
(
env
),
clusterName
,
namespaceName
);
if
(
releaseDTO
==
null
)
{
return
null
;
}
return
OpenApiBeanUtils
.
transformFromReleaseDTO
(
releaseDTO
);
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAPI.java
View file @
7b7d753f
...
@@ -90,6 +90,10 @@ public class AdminServiceAPI {
...
@@ -90,6 +90,10 @@ public class AdminServiceAPI {
return
Arrays
.
asList
(
itemDTOs
);
return
Arrays
.
asList
(
itemDTOs
);
}
}
public
ItemDTO
loadItem
(
Env
env
,
long
itemId
)
{
return
restTemplate
.
get
(
env
,
"/items/{itemId}"
,
ItemDTO
.
class
,
itemId
);
}
public
void
updateItemsByChangeSet
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespace
,
public
void
updateItemsByChangeSet
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespace
,
ItemChangeSets
changeSets
)
{
ItemChangeSets
changeSets
)
{
restTemplate
.
post
(
env
,
"apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/itemset"
,
restTemplate
.
post
(
env
,
"apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/itemset"
,
...
@@ -104,8 +108,7 @@ public class AdminServiceAPI {
...
@@ -104,8 +108,7 @@ public class AdminServiceAPI {
public
ItemDTO
createItem
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespace
,
ItemDTO
item
)
{
public
ItemDTO
createItem
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespace
,
ItemDTO
item
)
{
return
restTemplate
.
post
(
env
,
"apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items"
,
return
restTemplate
.
post
(
env
,
"apps/{appId}/clusters/{clusterName}/namespaces/{namespaceName}/items"
,
item
,
ItemDTO
.
class
,
appId
,
clusterName
,
namespace
)
item
,
ItemDTO
.
class
,
appId
,
clusterName
,
namespace
);
;
}
}
public
void
deleteItem
(
Env
env
,
long
itemId
,
String
operator
)
{
public
void
deleteItem
(
Env
env
,
long
itemId
,
String
operator
)
{
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/api/AdminServiceAddressLocator.java
View file @
7b7d753f
...
@@ -73,7 +73,7 @@ public class AdminServiceAddressLocator {
...
@@ -73,7 +73,7 @@ public class AdminServiceAddressLocator {
public
List
<
ServiceDTO
>
getServiceList
(
Env
env
)
{
public
List
<
ServiceDTO
>
getServiceList
(
Env
env
)
{
List
<
ServiceDTO
>
services
=
cache
.
get
(
env
);
List
<
ServiceDTO
>
services
=
cache
.
get
(
env
);
if
(
CollectionUtils
.
isEmpty
(
services
))
{
if
(
CollectionUtils
.
isEmpty
(
services
))
{
return
Collections
.
EMPTY_LIST
;
return
Collections
.
emptyList
()
;
}
}
List
<
ServiceDTO
>
randomConfigServices
=
Lists
.
newArrayList
(
services
);
List
<
ServiceDTO
>
randomConfigServices
=
Lists
.
newArrayList
(
services
);
Collections
.
shuffle
(
randomConfigServices
);
Collections
.
shuffle
(
randomConfigServices
);
...
@@ -81,7 +81,7 @@ public class AdminServiceAddressLocator {
...
@@ -81,7 +81,7 @@ public class AdminServiceAddressLocator {
}
}
//Maintain admin server address
//Maintain admin server address
class
RefreshAdminServerAddressTask
implements
Runnable
{
private
class
RefreshAdminServerAddressTask
implements
Runnable
{
@Override
@Override
public
void
run
()
{
public
void
run
()
{
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/auth/PermissionValidator.java
View file @
7b7d753f
...
@@ -57,4 +57,8 @@ public class PermissionValidator {
...
@@ -57,4 +57,8 @@ public class PermissionValidator {
return
rolePermissionService
.
isSuperAdmin
(
userInfoHolder
.
getUser
().
getUserId
());
return
rolePermissionService
.
isSuperAdmin
(
userInfoHolder
.
getUser
().
getUserId
());
}
}
}
}
public
boolean
isSuperAdmin
()
{
return
rolePermissionService
.
isSuperAdmin
(
userInfoHolder
.
getUser
().
getUserId
());
}
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/configuration/AuthConfiguration.java
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
configuration
;
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
configuration
;
import
com.google.common.collect.Maps
;
import
com.ctrip.framework.apollo.openapi.filter.ConsumerAuthenticationFilter
;
import
com.ctrip.framework.apollo.openapi.service.ConsumerService
;
import
com.ctrip.framework.apollo.openapi.util.ConsumerAuthUtil
;
import
com.ctrip.framework.apollo.portal.auth.LogoutHandler
;
import
com.ctrip.framework.apollo.portal.auth.SsoHeartbeatHandler
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.auth.ctrip.CtripLogoutHandler
;
import
com.ctrip.framework.apollo.portal.auth.ctrip.CtripLogoutHandler
;
import
com.ctrip.framework.apollo.portal.auth.ctrip.CtripSsoHeartbeatHandler
;
import
com.ctrip.framework.apollo.portal.auth.ctrip.CtripSsoHeartbeatHandler
;
import
com.ctrip.framework.apollo.portal.auth.ctrip.CtripUserInfoHolder
;
import
com.ctrip.framework.apollo.portal.auth.ctrip.CtripUserInfoHolder
;
...
@@ -8,9 +16,6 @@ import com.ctrip.framework.apollo.portal.auth.defaultimpl.DefaultLogoutHandler;
...
@@ -8,9 +16,6 @@ import com.ctrip.framework.apollo.portal.auth.defaultimpl.DefaultLogoutHandler;
import
com.ctrip.framework.apollo.portal.auth.defaultimpl.DefaultSsoHeartbeatHandler
;
import
com.ctrip.framework.apollo.portal.auth.defaultimpl.DefaultSsoHeartbeatHandler
;
import
com.ctrip.framework.apollo.portal.auth.defaultimpl.DefaultUserInfoHolder
;
import
com.ctrip.framework.apollo.portal.auth.defaultimpl.DefaultUserInfoHolder
;
import
com.ctrip.framework.apollo.portal.auth.defaultimpl.DefaultUserService
;
import
com.ctrip.framework.apollo.portal.auth.defaultimpl.DefaultUserService
;
import
com.ctrip.framework.apollo.portal.auth.LogoutHandler
;
import
com.ctrip.framework.apollo.portal.auth.SsoHeartbeatHandler
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.service.ServerConfigService
;
import
com.ctrip.framework.apollo.portal.service.ServerConfigService
;
import
com.ctrip.framework.apollo.portal.service.UserService
;
import
com.ctrip.framework.apollo.portal.service.UserService
;
...
@@ -47,21 +52,21 @@ public class AuthConfiguration {
...
@@ -47,21 +52,21 @@ public class AuthConfiguration {
private
ServerConfigService
serverConfigService
;
private
ServerConfigService
serverConfigService
;
@Bean
@Bean
public
ServletListenerRegistrationBean
redisAppSettingListner
(){
public
ServletListenerRegistrationBean
redisAppSettingListner
()
{
ServletListenerRegistrationBean
redisAppSettingListner
=
new
ServletListenerRegistrationBean
();
ServletListenerRegistrationBean
redisAppSettingListner
=
new
ServletListenerRegistrationBean
();
redisAppSettingListner
.
setListener
(
listener
(
"org.jasig.cas.client.credis.CRedisAppSettingListner"
));
redisAppSettingListner
.
setListener
(
listener
(
"org.jasig.cas.client.credis.CRedisAppSettingListner"
));
return
redisAppSettingListner
;
return
redisAppSettingListner
;
}
}
@Bean
@Bean
public
ServletListenerRegistrationBean
singleSignOutHttpSessionListener
(){
public
ServletListenerRegistrationBean
singleSignOutHttpSessionListener
()
{
ServletListenerRegistrationBean
singleSignOutHttpSessionListener
=
new
ServletListenerRegistrationBean
();
ServletListenerRegistrationBean
singleSignOutHttpSessionListener
=
new
ServletListenerRegistrationBean
();
singleSignOutHttpSessionListener
.
setListener
(
listener
(
"org.jasig.cas.client.session.SingleSignOutHttpSessionListener"
));
singleSignOutHttpSessionListener
.
setListener
(
listener
(
"org.jasig.cas.client.session.SingleSignOutHttpSessionListener"
));
return
singleSignOutHttpSessionListener
;
return
singleSignOutHttpSessionListener
;
}
}
@Bean
@Bean
public
FilterRegistrationBean
casFilter
(){
public
FilterRegistrationBean
casFilter
()
{
FilterRegistrationBean
singleSignOutFilter
=
new
FilterRegistrationBean
();
FilterRegistrationBean
singleSignOutFilter
=
new
FilterRegistrationBean
();
singleSignOutFilter
.
setFilter
(
filter
(
"org.jasig.cas.client.session.SingleSignOutFilter"
));
singleSignOutFilter
.
setFilter
(
filter
(
"org.jasig.cas.client.session.SingleSignOutFilter"
));
singleSignOutFilter
.
addUrlPatterns
(
"/*"
);
singleSignOutFilter
.
addUrlPatterns
(
"/*"
);
...
@@ -69,15 +74,16 @@ public class AuthConfiguration {
...
@@ -69,15 +74,16 @@ public class AuthConfiguration {
}
}
@Bean
@Bean
public
FilterRegistrationBean
authenticationFilter
(){
public
FilterRegistrationBean
authenticationFilter
()
{
FilterRegistrationBean
casFilter
=
new
FilterRegistrationBean
();
FilterRegistrationBean
casFilter
=
new
FilterRegistrationBean
();
Map
<
String
,
String
>
filterInitParam
=
new
HashMap
();
Map
<
String
,
String
>
filterInitParam
=
Maps
.
new
HashMap
();
filterInitParam
.
put
(
"redisClusterName"
,
"casClientPrincipal"
);
filterInitParam
.
put
(
"redisClusterName"
,
"casClientPrincipal"
);
filterInitParam
.
put
(
"serverName"
,
serverConfigService
.
getValue
(
"serverName"
));
filterInitParam
.
put
(
"serverName"
,
serverConfigService
.
getValue
(
"serverName"
));
filterInitParam
.
put
(
"casServerLoginUrl"
,
serverConfigService
.
getValue
(
"casServerLoginUrl"
));
filterInitParam
.
put
(
"casServerLoginUrl"
,
serverConfigService
.
getValue
(
"casServerLoginUrl"
));
//we don't want to use session to store login information, since we will be deployed to a cluster, not a single instance
//we don't want to use session to store login information, since we will be deployed to a cluster, not a single instance
filterInitParam
.
put
(
"useSession"
,
"false"
);
filterInitParam
.
put
(
"useSession"
,
"false"
);
filterInitParam
.
put
(
"/openapi.*"
,
"exclude"
);
casFilter
.
setInitParameters
(
filterInitParam
);
casFilter
.
setInitParameters
(
filterInitParam
);
casFilter
.
setFilter
(
filter
(
"com.ctrip.framework.apollo.sso.filter.ApolloAuthenticationFilter"
));
casFilter
.
setFilter
(
filter
(
"com.ctrip.framework.apollo.sso.filter.ApolloAuthenticationFilter"
));
...
@@ -87,9 +93,9 @@ public class AuthConfiguration {
...
@@ -87,9 +93,9 @@ public class AuthConfiguration {
}
}
@Bean
@Bean
public
FilterRegistrationBean
casValidationFilter
(){
public
FilterRegistrationBean
casValidationFilter
()
{
FilterRegistrationBean
casValidationFilter
=
new
FilterRegistrationBean
();
FilterRegistrationBean
casValidationFilter
=
new
FilterRegistrationBean
();
Map
<
String
,
String
>
filterInitParam
=
new
HashMap
();
Map
<
String
,
String
>
filterInitParam
=
Maps
.
new
HashMap
();
filterInitParam
.
put
(
"casServerUrlPrefix"
,
serverConfigService
.
getValue
(
"casServerUrlPrefix"
));
filterInitParam
.
put
(
"casServerUrlPrefix"
,
serverConfigService
.
getValue
(
"casServerUrlPrefix"
));
filterInitParam
.
put
(
"serverName"
,
serverConfigService
.
getValue
(
"serverName"
));
filterInitParam
.
put
(
"serverName"
,
serverConfigService
.
getValue
(
"serverName"
));
filterInitParam
.
put
(
"encoding"
,
"UTF-8"
);
filterInitParam
.
put
(
"encoding"
,
"UTF-8"
);
...
@@ -107,11 +113,15 @@ public class AuthConfiguration {
...
@@ -107,11 +113,15 @@ public class AuthConfiguration {
}
}
@Bean
@Bean
public
FilterRegistrationBean
assertionHolder
(){
public
FilterRegistrationBean
assertionHolder
()
{
FilterRegistrationBean
assertionHolderFilter
=
new
FilterRegistrationBean
();
FilterRegistrationBean
assertionHolderFilter
=
new
FilterRegistrationBean
();
Map
<
String
,
String
>
filterInitParam
=
Maps
.
newHashMap
();
filterInitParam
.
put
(
"/openapi.*"
,
"exclude"
);
assertionHolderFilter
.
setInitParameters
(
filterInitParam
);
assertionHolderFilter
.
setFilter
(
filter
(
"com.ctrip.framework.apollo.sso.filter.ApolloAssertionThreadLocalFilter"
));
assertionHolderFilter
.
setFilter
(
filter
(
"com.ctrip.framework.apollo.sso.filter.ApolloAssertionThreadLocalFilter"
));
assertionHolderFilter
.
addUrlPatterns
(
"/*"
);
assertionHolderFilter
.
addUrlPatterns
(
"/*"
);
...
@@ -119,16 +129,16 @@ public class AuthConfiguration {
...
@@ -119,16 +129,16 @@ public class AuthConfiguration {
}
}
@Bean
@Bean
public
CtripUserInfoHolder
ctripUserInfoHolder
(){
public
CtripUserInfoHolder
ctripUserInfoHolder
()
{
return
new
CtripUserInfoHolder
();
return
new
CtripUserInfoHolder
();
}
}
@Bean
@Bean
public
CtripLogoutHandler
logoutHandler
(){
public
CtripLogoutHandler
logoutHandler
()
{
return
new
CtripLogoutHandler
();
return
new
CtripLogoutHandler
();
}
}
private
Filter
filter
(
String
className
){
private
Filter
filter
(
String
className
)
{
Class
clazz
=
null
;
Class
clazz
=
null
;
try
{
try
{
clazz
=
Class
.
forName
(
className
);
clazz
=
Class
.
forName
(
className
);
...
@@ -140,7 +150,7 @@ public class AuthConfiguration {
...
@@ -140,7 +150,7 @@ public class AuthConfiguration {
}
}
private
EventListener
listener
(
String
className
){
private
EventListener
listener
(
String
className
)
{
Class
clazz
=
null
;
Class
clazz
=
null
;
try
{
try
{
clazz
=
Class
.
forName
(
className
);
clazz
=
Class
.
forName
(
className
);
...
@@ -168,6 +178,16 @@ public class AuthConfiguration {
...
@@ -168,6 +178,16 @@ public class AuthConfiguration {
@Configuration
@Configuration
static
class
DefaultAuthAutoConfiguration
{
static
class
DefaultAuthAutoConfiguration
{
@Bean
public
FilterRegistrationBean
openApiAuthenticationFilter
(
ConsumerAuthUtil
consumerAuthUtil
)
{
FilterRegistrationBean
openApiFilter
=
new
FilterRegistrationBean
();
openApiFilter
.
setFilter
(
new
ConsumerAuthenticationFilter
(
consumerAuthUtil
));
openApiFilter
.
addUrlPatterns
(
"/openapi/*"
);
return
openApiFilter
;
}
@Bean
@Bean
@ConditionalOnMissingBean
(
SsoHeartbeatHandler
.
class
)
@ConditionalOnMissingBean
(
SsoHeartbeatHandler
.
class
)
public
SsoHeartbeatHandler
defaultSsoHeartbeatHandler
()
{
public
SsoHeartbeatHandler
defaultSsoHeartbeatHandler
()
{
...
@@ -176,13 +196,13 @@ public class AuthConfiguration {
...
@@ -176,13 +196,13 @@ public class AuthConfiguration {
@Bean
@Bean
@ConditionalOnMissingBean
(
UserInfoHolder
.
class
)
@ConditionalOnMissingBean
(
UserInfoHolder
.
class
)
public
DefaultUserInfoHolder
notCtripUserInfoHolder
(){
public
DefaultUserInfoHolder
notCtripUserInfoHolder
()
{
return
new
DefaultUserInfoHolder
();
return
new
DefaultUserInfoHolder
();
}
}
@Bean
@Bean
@ConditionalOnMissingBean
(
LogoutHandler
.
class
)
@ConditionalOnMissingBean
(
LogoutHandler
.
class
)
public
DefaultLogoutHandler
logoutHandler
(){
public
DefaultLogoutHandler
logoutHandler
()
{
return
new
DefaultLogoutHandler
();
return
new
DefaultLogoutHandler
();
}
}
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/AppController.java
View file @
7b7d753f
...
@@ -5,6 +5,7 @@ import com.ctrip.framework.apollo.common.entity.App;
...
@@ -5,6 +5,7 @@ import com.ctrip.framework.apollo.common.entity.App;
import
com.ctrip.framework.apollo.common.http.MultiResponseEntity
;
import
com.ctrip.framework.apollo.common.http.MultiResponseEntity
;
import
com.ctrip.framework.apollo.common.http.RichResponseEntity
;
import
com.ctrip.framework.apollo.common.http.RichResponseEntity
;
import
com.ctrip.framework.apollo.common.utils.InputValidator
;
import
com.ctrip.framework.apollo.common.utils.InputValidator
;
import
com.ctrip.framework.apollo.common.utils.RequestPrecondition
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.portal.PortalSettings
;
import
com.ctrip.framework.apollo.portal.PortalSettings
;
...
@@ -27,7 +28,6 @@ import org.springframework.web.client.HttpClientErrorException;
...
@@ -27,7 +28,6 @@ import org.springframework.web.client.HttpClientErrorException;
import
java.util.List
;
import
java.util.List
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkArgument
;
@RestController
@RestController
@RequestMapping
(
"/apps"
)
@RequestMapping
(
"/apps"
)
...
@@ -75,7 +75,7 @@ public class AppController {
...
@@ -75,7 +75,7 @@ public class AppController {
@RequestMapping
(
value
=
""
,
method
=
RequestMethod
.
POST
)
@RequestMapping
(
value
=
""
,
method
=
RequestMethod
.
POST
)
public
ResponseEntity
<
Void
>
create
(
@RequestBody
App
app
)
{
public
ResponseEntity
<
Void
>
create
(
@RequestBody
App
app
)
{
checkArgument
(
app
.
getName
(),
app
.
getAppId
(),
app
.
getOwnerName
(),
RequestPrecondition
.
checkArgumentsNotEmpty
(
app
.
getName
(),
app
.
getAppId
(),
app
.
getOwnerName
(),
app
.
getOrgId
(),
app
.
getOrgName
());
app
.
getOrgId
(),
app
.
getOrgName
());
if
(!
InputValidator
.
isValidClusterNamespace
(
app
.
getAppId
()))
{
if
(!
InputValidator
.
isValidClusterNamespace
(
app
.
getAppId
()))
{
throw
new
BadRequestException
(
String
.
format
(
"AppId格式错误: %s"
,
InputValidator
.
INVALID_CLUSTER_NAMESPACE_MESSAGE
));
throw
new
BadRequestException
(
String
.
format
(
"AppId格式错误: %s"
,
InputValidator
.
INVALID_CLUSTER_NAMESPACE_MESSAGE
));
...
@@ -98,7 +98,7 @@ public class AppController {
...
@@ -98,7 +98,7 @@ public class AppController {
"application/json"
})
"application/json"
})
public
ResponseEntity
<
Void
>
create
(
@PathVariable
String
env
,
@RequestBody
App
app
)
{
public
ResponseEntity
<
Void
>
create
(
@PathVariable
String
env
,
@RequestBody
App
app
)
{
checkArgument
(
app
.
getName
(),
app
.
getAppId
(),
app
.
getOwnerEmail
(),
app
.
getOwnerName
(),
RequestPrecondition
.
checkArgumentsNotEmpty
(
app
.
getName
(),
app
.
getAppId
(),
app
.
getOwnerEmail
(),
app
.
getOwnerName
(),
app
.
getOrgId
(),
app
.
getOrgName
());
app
.
getOrgId
(),
app
.
getOrgName
());
if
(!
InputValidator
.
isValidClusterNamespace
(
app
.
getAppId
()))
{
if
(!
InputValidator
.
isValidClusterNamespace
(
app
.
getAppId
()))
{
throw
new
BadRequestException
(
InputValidator
.
INVALID_CLUSTER_NAMESPACE_MESSAGE
);
throw
new
BadRequestException
(
InputValidator
.
INVALID_CLUSTER_NAMESPACE_MESSAGE
);
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ClusterController.java
View file @
7b7d753f
...
@@ -2,6 +2,7 @@ package com.ctrip.framework.apollo.portal.controller;
...
@@ -2,6 +2,7 @@ package com.ctrip.framework.apollo.portal.controller;
import
com.ctrip.framework.apollo.common.utils.InputValidator
;
import
com.ctrip.framework.apollo.common.utils.InputValidator
;
import
com.ctrip.framework.apollo.common.dto.ClusterDTO
;
import
com.ctrip.framework.apollo.common.dto.ClusterDTO
;
import
com.ctrip.framework.apollo.common.utils.RequestPrecondition
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
...
@@ -15,7 +16,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
...
@@ -15,7 +16,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkArgument
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkModel
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkModel
;
@RestController
@RestController
...
@@ -32,7 +32,7 @@ public class ClusterController {
...
@@ -32,7 +32,7 @@ public class ClusterController {
@RequestBody
ClusterDTO
cluster
){
@RequestBody
ClusterDTO
cluster
){
checkModel
(
cluster
!=
null
);
checkModel
(
cluster
!=
null
);
checkArgument
(
cluster
.
getAppId
(),
cluster
.
getName
());
RequestPrecondition
.
checkArgumentsNotEmpty
(
cluster
.
getAppId
(),
cluster
.
getName
());
if
(!
InputValidator
.
isValidClusterNamespace
(
cluster
.
getName
()))
{
if
(!
InputValidator
.
isValidClusterNamespace
(
cluster
.
getName
()))
{
throw
new
BadRequestException
(
String
.
format
(
"Cluster格式错误: %s"
,
InputValidator
.
INVALID_CLUSTER_NAMESPACE_MESSAGE
));
throw
new
BadRequestException
(
String
.
format
(
"Cluster格式错误: %s"
,
InputValidator
.
INVALID_CLUSTER_NAMESPACE_MESSAGE
));
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ConsumerController.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
controller
;
import
com.ctrip.framework.apollo.openapi.entity.ConsumerToken
;
import
com.ctrip.framework.apollo.openapi.service.ConsumerService
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.GregorianCalendar
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@RestController
@RequestMapping
(
"/consumers"
)
public
class
ConsumerController
{
private
static
final
Date
DEFAULT_EXPIRES
=
new
GregorianCalendar
(
2099
,
Calendar
.
JANUARY
,
1
)
.
getTime
();
@Autowired
private
ConsumerService
consumerService
;
@Autowired
private
UserInfoHolder
userInfoHolder
;
@PreAuthorize
(
value
=
"@permissionValidator.isSuperAdmin()"
)
@RequestMapping
(
value
=
"/{consumerId}/tokens"
,
method
=
RequestMethod
.
POST
)
public
ConsumerToken
createConsumerToken
(
@PathVariable
long
consumerId
,
@RequestParam
(
value
=
"expires"
,
required
=
false
)
@DateTimeFormat
(
pattern
=
"yyyyMMddHHmmss"
)
Date
expires
)
{
if
(
expires
==
null
)
{
expires
=
DEFAULT_EXPIRES
;
}
ConsumerToken
consumerToken
=
generateConsumerToken
(
consumerId
,
expires
);
return
consumerService
.
createConsumerToken
(
consumerToken
);
}
private
ConsumerToken
generateConsumerToken
(
long
consumerId
,
Date
expires
)
{
String
createdBy
=
userInfoHolder
.
getUser
().
getUserId
();
Date
createdTime
=
new
Date
();
ConsumerToken
consumerToken
=
new
ConsumerToken
();
consumerToken
.
setConsumerId
(
consumerId
);
consumerToken
.
setExpires
(
expires
);
consumerToken
.
setDataChangeCreatedBy
(
createdBy
);
consumerToken
.
setDataChangeCreatedTime
(
createdTime
);
consumerToken
.
setDataChangeLastModifiedBy
(
createdBy
);
consumerToken
.
setDataChangeLastModifiedTime
(
createdTime
);
consumerService
.
generateAndEnrichConsumerToken
(
consumerToken
);
return
consumerToken
;
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ItemController.java
View file @
7b7d753f
...
@@ -4,10 +4,11 @@ import com.ctrip.framework.apollo.common.dto.ItemDTO;
...
@@ -4,10 +4,11 @@ import com.ctrip.framework.apollo.common.dto.ItemDTO;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.entity.vo.ItemDiffs
;
import
com.ctrip.framework.apollo.portal.entity.vo.ItemDiffs
;
import
com.ctrip.framework.apollo.portal.entity.form.NamespaceSyncModel
;
import
com.ctrip.framework.apollo.portal.entity.form.NamespaceSyncModel
;
import
com.ctrip.framework.apollo.portal.entity.form.NamespaceTextModel
;
import
com.ctrip.framework.apollo.portal.entity.form.NamespaceTextModel
;
import
com.ctrip.framework.apollo.portal.service.
Config
Service
;
import
com.ctrip.framework.apollo.portal.service.
Item
Service
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.HttpStatus
;
...
@@ -29,7 +30,9 @@ import static com.ctrip.framework.apollo.common.utils.RequestPrecondition.checkM
...
@@ -29,7 +30,9 @@ import static com.ctrip.framework.apollo.common.utils.RequestPrecondition.checkM
public
class
ItemController
{
public
class
ItemController
{
@Autowired
@Autowired
private
ConfigService
configService
;
private
ItemService
configService
;
@Autowired
private
UserInfoHolder
userInfoHolder
;
@PreAuthorize
(
value
=
"@permissionValidator.hasModifyNamespacePermission(#appId, #namespaceName)"
)
@PreAuthorize
(
value
=
"@permissionValidator.hasModifyNamespacePermission(#appId, #namespaceName)"
)
@RequestMapping
(
value
=
"/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/{namespaceName}/items"
,
method
=
RequestMethod
.
PUT
,
consumes
=
{
@RequestMapping
(
value
=
"/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/{namespaceName}/items"
,
method
=
RequestMethod
.
PUT
,
consumes
=
{
...
@@ -77,7 +80,7 @@ public class ItemController {
...
@@ -77,7 +80,7 @@ public class ItemController {
if
(
itemId
<=
0
){
if
(
itemId
<=
0
){
throw
new
BadRequestException
(
"item id invalid"
);
throw
new
BadRequestException
(
"item id invalid"
);
}
}
configService
.
deleteItem
(
Env
.
valueOf
(
env
),
itemId
);
configService
.
deleteItem
(
Env
.
valueOf
(
env
),
itemId
,
userInfoHolder
.
getUser
().
getUserId
()
);
}
}
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/NamespaceController.java
View file @
7b7d753f
...
@@ -4,6 +4,7 @@ import com.ctrip.framework.apollo.common.entity.App;
...
@@ -4,6 +4,7 @@ import com.ctrip.framework.apollo.common.entity.App;
import
com.ctrip.framework.apollo.common.entity.AppNamespace
;
import
com.ctrip.framework.apollo.common.entity.AppNamespace
;
import
com.ctrip.framework.apollo.common.utils.InputValidator
;
import
com.ctrip.framework.apollo.common.utils.InputValidator
;
import
com.ctrip.framework.apollo.common.dto.NamespaceDTO
;
import
com.ctrip.framework.apollo.common.dto.NamespaceDTO
;
import
com.ctrip.framework.apollo.common.utils.RequestPrecondition
;
import
com.ctrip.framework.apollo.core.enums.ConfigFileFormat
;
import
com.ctrip.framework.apollo.core.enums.ConfigFileFormat
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
...
@@ -33,7 +34,6 @@ import org.springframework.web.bind.annotation.RestController;
...
@@ -33,7 +34,6 @@ import org.springframework.web.bind.annotation.RestController;
import
java.util.List
;
import
java.util.List
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkArgument
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkModel
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkModel
;
@RestController
@RestController
...
@@ -71,7 +71,8 @@ public class NamespaceController {
...
@@ -71,7 +71,8 @@ public class NamespaceController {
for
(
NamespaceCreationModel
model
:
models
)
{
for
(
NamespaceCreationModel
model
:
models
)
{
NamespaceDTO
namespace
=
model
.
getNamespace
();
NamespaceDTO
namespace
=
model
.
getNamespace
();
checkArgument
(
model
.
getEnv
(),
namespace
.
getAppId
(),
namespace
.
getClusterName
(),
namespace
.
getNamespaceName
());
RequestPrecondition
.
checkArgumentsNotEmpty
(
model
.
getEnv
(),
namespace
.
getAppId
(),
namespace
.
getClusterName
(),
namespace
.
getNamespaceName
());
try
{
try
{
// TODO: 16/6/17 某些环境创建失败,统一处理这种场景
// TODO: 16/6/17 某些环境创建失败,统一处理这种场景
...
@@ -89,7 +90,7 @@ public class NamespaceController {
...
@@ -89,7 +90,7 @@ public class NamespaceController {
@RequestMapping
(
value
=
"/apps/{appId}/appnamespaces"
,
method
=
RequestMethod
.
POST
)
@RequestMapping
(
value
=
"/apps/{appId}/appnamespaces"
,
method
=
RequestMethod
.
POST
)
public
AppNamespace
createAppNamespace
(
@PathVariable
String
appId
,
@RequestBody
AppNamespace
appNamespace
)
{
public
AppNamespace
createAppNamespace
(
@PathVariable
String
appId
,
@RequestBody
AppNamespace
appNamespace
)
{
checkArgument
(
appNamespace
.
getAppId
(),
appNamespace
.
getName
());
RequestPrecondition
.
checkArgumentsNotEmpty
(
appNamespace
.
getAppId
(),
appNamespace
.
getName
());
if
(!
InputValidator
.
isValidAppNamespace
(
appNamespace
.
getName
()))
{
if
(!
InputValidator
.
isValidAppNamespace
(
appNamespace
.
getName
()))
{
throw
new
BadRequestException
(
String
.
format
(
"Namespace格式错误: %s"
,
throw
new
BadRequestException
(
String
.
format
(
"Namespace格式错误: %s"
,
InputValidator
.
INVALID_CLUSTER_NAMESPACE_MESSAGE
+
" & "
InputValidator
.
INVALID_CLUSTER_NAMESPACE_MESSAGE
+
" & "
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/PermissionController.java
View file @
7b7d753f
...
@@ -3,6 +3,7 @@ package com.ctrip.framework.apollo.portal.controller;
...
@@ -3,6 +3,7 @@ package com.ctrip.framework.apollo.portal.controller;
import
com.google.common.collect.Sets
;
import
com.google.common.collect.Sets
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.common.utils.RequestPrecondition
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.constant.RoleType
;
import
com.ctrip.framework.apollo.portal.constant.RoleType
;
import
com.ctrip.framework.apollo.portal.entity.po.UserInfo
;
import
com.ctrip.framework.apollo.portal.entity.po.UserInfo
;
...
@@ -26,7 +27,6 @@ import org.springframework.web.bind.annotation.RestController;
...
@@ -26,7 +27,6 @@ import org.springframework.web.bind.annotation.RestController;
import
java.util.Set
;
import
java.util.Set
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkArgument
;
@RestController
@RestController
...
@@ -94,7 +94,7 @@ public class PermissionController {
...
@@ -94,7 +94,7 @@ public class PermissionController {
public
ResponseEntity
<
Void
>
assignNamespaceRoleToUser
(
@PathVariable
String
appId
,
@PathVariable
String
namespaceName
,
public
ResponseEntity
<
Void
>
assignNamespaceRoleToUser
(
@PathVariable
String
appId
,
@PathVariable
String
namespaceName
,
@PathVariable
String
roleType
,
@RequestBody
String
user
){
@PathVariable
String
roleType
,
@RequestBody
String
user
){
checkUserExists
(
user
);
checkUserExists
(
user
);
checkArgument
(
user
);
RequestPrecondition
.
checkArgumentsNotEmpty
(
user
);
if
(!
RoleType
.
isValidRoleType
(
roleType
)){
if
(!
RoleType
.
isValidRoleType
(
roleType
)){
throw
new
BadRequestException
(
"role type is illegal"
);
throw
new
BadRequestException
(
"role type is illegal"
);
...
@@ -112,7 +112,7 @@ public class PermissionController {
...
@@ -112,7 +112,7 @@ public class PermissionController {
@RequestMapping
(
value
=
"/apps/{appId}/namespaces/{namespaceName}/roles/{roleType}"
,
method
=
RequestMethod
.
DELETE
)
@RequestMapping
(
value
=
"/apps/{appId}/namespaces/{namespaceName}/roles/{roleType}"
,
method
=
RequestMethod
.
DELETE
)
public
ResponseEntity
<
Void
>
removeNamespaceRoleFromUser
(
@PathVariable
String
appId
,
@PathVariable
String
namespaceName
,
public
ResponseEntity
<
Void
>
removeNamespaceRoleFromUser
(
@PathVariable
String
appId
,
@PathVariable
String
namespaceName
,
@PathVariable
String
roleType
,
@RequestParam
String
user
){
@PathVariable
String
roleType
,
@RequestParam
String
user
){
checkArgument
(
user
);
RequestPrecondition
.
checkArgumentsNotEmpty
(
user
);
if
(!
RoleType
.
isValidRoleType
(
roleType
)){
if
(!
RoleType
.
isValidRoleType
(
roleType
)){
throw
new
BadRequestException
(
"role type is illegal"
);
throw
new
BadRequestException
(
"role type is illegal"
);
...
@@ -138,7 +138,7 @@ public class PermissionController {
...
@@ -138,7 +138,7 @@ public class PermissionController {
public
ResponseEntity
<
Void
>
assignAppRoleToUser
(
@PathVariable
String
appId
,
@PathVariable
String
roleType
,
public
ResponseEntity
<
Void
>
assignAppRoleToUser
(
@PathVariable
String
appId
,
@PathVariable
String
roleType
,
@RequestBody
String
user
){
@RequestBody
String
user
){
checkUserExists
(
user
);
checkUserExists
(
user
);
checkArgument
(
user
);
RequestPrecondition
.
checkArgumentsNotEmpty
(
user
);
if
(!
RoleType
.
isValidRoleType
(
roleType
)){
if
(!
RoleType
.
isValidRoleType
(
roleType
)){
throw
new
BadRequestException
(
"role type is illegal"
);
throw
new
BadRequestException
(
"role type is illegal"
);
...
@@ -156,7 +156,7 @@ public class PermissionController {
...
@@ -156,7 +156,7 @@ public class PermissionController {
@RequestMapping
(
value
=
"/apps/{appId}/roles/{roleType}"
,
method
=
RequestMethod
.
DELETE
)
@RequestMapping
(
value
=
"/apps/{appId}/roles/{roleType}"
,
method
=
RequestMethod
.
DELETE
)
public
ResponseEntity
<
Void
>
removeAppRoleFromUser
(
@PathVariable
String
appId
,
@PathVariable
String
roleType
,
public
ResponseEntity
<
Void
>
removeAppRoleFromUser
(
@PathVariable
String
appId
,
@PathVariable
String
roleType
,
@RequestParam
String
user
){
@RequestParam
String
user
){
checkArgument
(
user
);
RequestPrecondition
.
checkArgumentsNotEmpty
(
user
);
if
(!
RoleType
.
isValidRoleType
(
roleType
)){
if
(!
RoleType
.
isValidRoleType
(
roleType
)){
throw
new
BadRequestException
(
"role type is illegal"
);
throw
new
BadRequestException
(
"role type is illegal"
);
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ReleaseController.java
View file @
7b7d753f
...
@@ -28,7 +28,7 @@ public class ReleaseController {
...
@@ -28,7 +28,7 @@ public class ReleaseController {
private
ReleaseService
releaseService
;
private
ReleaseService
releaseService
;
@PreAuthorize
(
value
=
"@permissionValidator.hasReleaseNamespacePermission(#appId, #namespaceName)"
)
@PreAuthorize
(
value
=
"@permissionValidator.hasReleaseNamespacePermission(#appId, #namespaceName)"
)
@RequestMapping
(
value
=
"/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/{namespaceName}/release"
)
@RequestMapping
(
value
=
"/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/{namespaceName}/release"
,
method
=
RequestMethod
.
POST
)
public
ReleaseDTO
createRelease
(
@PathVariable
String
appId
,
public
ReleaseDTO
createRelease
(
@PathVariable
String
appId
,
@PathVariable
String
env
,
@PathVariable
String
clusterName
,
@PathVariable
String
env
,
@PathVariable
String
clusterName
,
@PathVariable
String
namespaceName
,
@RequestBody
NamespaceReleaseModel
model
)
{
@PathVariable
String
namespaceName
,
@RequestBody
NamespaceReleaseModel
model
)
{
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/controller/ServerConfigController.java
View file @
7b7d753f
...
@@ -2,17 +2,18 @@ package com.ctrip.framework.apollo.portal.controller;
...
@@ -2,17 +2,18 @@ package com.ctrip.framework.apollo.portal.controller;
import
com.ctrip.framework.apollo.common.utils.BeanUtils
;
import
com.ctrip.framework.apollo.common.utils.BeanUtils
;
import
com.ctrip.framework.apollo.common.utils.RequestPrecondition
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.entity.po.ServerConfig
;
import
com.ctrip.framework.apollo.portal.entity.po.ServerConfig
;
import
com.ctrip.framework.apollo.portal.repository.ServerConfigRepository
;
import
com.ctrip.framework.apollo.portal.repository.ServerConfigRepository
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkArgument
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkModel
;
import
static
com
.
ctrip
.
framework
.
apollo
.
common
.
utils
.
RequestPrecondition
.
checkModel
;
/**
/**
...
@@ -26,11 +27,12 @@ public class ServerConfigController {
...
@@ -26,11 +27,12 @@ public class ServerConfigController {
@Autowired
@Autowired
private
UserInfoHolder
userInfoHolder
;
private
UserInfoHolder
userInfoHolder
;
@PreAuthorize
(
value
=
"@permissionValidator.isSuperAdmin()"
)
@RequestMapping
(
value
=
"/server/config"
,
method
=
RequestMethod
.
POST
)
@RequestMapping
(
value
=
"/server/config"
,
method
=
RequestMethod
.
POST
)
public
ServerConfig
createOrUpdate
(
@RequestBody
ServerConfig
serverConfig
)
{
public
ServerConfig
createOrUpdate
(
@RequestBody
ServerConfig
serverConfig
)
{
checkModel
(
serverConfig
!=
null
);
checkModel
(
serverConfig
!=
null
);
checkArgument
(
serverConfig
.
getKey
(),
serverConfig
.
getValue
());
RequestPrecondition
.
checkArgumentsNotEmpty
(
serverConfig
.
getKey
(),
serverConfig
.
getValue
());
String
modifiedBy
=
userInfoHolder
.
getUser
().
getUserId
();
String
modifiedBy
=
userInfoHolder
.
getUser
().
getUserId
();
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/entity/form/NamespaceReleaseModel.java
View file @
7b7d753f
...
@@ -12,6 +12,7 @@ public class NamespaceReleaseModel implements Verifiable {
...
@@ -12,6 +12,7 @@ public class NamespaceReleaseModel implements Verifiable {
private
String
namespaceName
;
private
String
namespaceName
;
private
String
releaseTitle
;
private
String
releaseTitle
;
private
String
releaseComment
;
private
String
releaseComment
;
private
String
releaseBy
;
@Override
@Override
public
boolean
isInvalid
()
{
public
boolean
isInvalid
()
{
...
@@ -66,4 +67,11 @@ public class NamespaceReleaseModel implements Verifiable {
...
@@ -66,4 +67,11 @@ public class NamespaceReleaseModel implements Verifiable {
this
.
releaseComment
=
releaseComment
;
this
.
releaseComment
=
releaseComment
;
}
}
public
String
getReleaseBy
()
{
return
releaseBy
;
}
public
void
setReleaseBy
(
String
releaseBy
)
{
this
.
releaseBy
=
releaseBy
;
}
}
}
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/entity/form/NamespaceSyncModel.java
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
entity
.
form
;
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
entity
.
form
;
import
com.ctrip.framework.apollo.common.dto.ItemDTO
;
import
com.ctrip.framework.apollo.common.dto.ItemDTO
;
import
com.ctrip.framework.apollo.portal.entity.vo.NamespaceIdentifer
;
import
com.ctrip.framework.apollo.portal.entity.vo.NamespaceIdentif
i
er
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
...
@@ -9,7 +9,7 @@ import java.util.List;
...
@@ -9,7 +9,7 @@ import java.util.List;
public
class
NamespaceSyncModel
implements
Verifiable
{
public
class
NamespaceSyncModel
implements
Verifiable
{
private
List
<
NamespaceIdentifer
>
syncToNamespaces
;
private
List
<
NamespaceIdentif
i
er
>
syncToNamespaces
;
private
List
<
ItemDTO
>
syncItems
;
private
List
<
ItemDTO
>
syncItems
;
@Override
@Override
...
@@ -17,19 +17,19 @@ public class NamespaceSyncModel implements Verifiable {
...
@@ -17,19 +17,19 @@ public class NamespaceSyncModel implements Verifiable {
if
(
CollectionUtils
.
isEmpty
(
syncToNamespaces
)
||
CollectionUtils
.
isEmpty
(
syncItems
)){
if
(
CollectionUtils
.
isEmpty
(
syncToNamespaces
)
||
CollectionUtils
.
isEmpty
(
syncItems
)){
return
true
;
return
true
;
}
}
for
(
NamespaceIdentif
er
namespaceIdentifer
:
syncToNamespaces
){
for
(
NamespaceIdentif
ier
namespaceIdentifier
:
syncToNamespaces
){
if
(
namespaceIdentifer
.
isInvalid
()){
if
(
namespaceIdentif
i
er
.
isInvalid
()){
return
true
;
return
true
;
}
}
}
}
return
false
;
return
false
;
}
}
public
List
<
NamespaceIdentifer
>
getSyncToNamespaces
()
{
public
List
<
NamespaceIdentif
i
er
>
getSyncToNamespaces
()
{
return
syncToNamespaces
;
return
syncToNamespaces
;
}
}
public
void
setSyncToNamespaces
(
List
<
NamespaceIdentifer
>
syncToNamespaces
)
{
public
void
setSyncToNamespaces
(
List
<
NamespaceIdentif
i
er
>
syncToNamespaces
)
{
this
.
syncToNamespaces
=
syncToNamespaces
;
this
.
syncToNamespaces
=
syncToNamespaces
;
}
}
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/entity/vo/ItemDiffs.java
View file @
7b7d753f
...
@@ -3,18 +3,18 @@ package com.ctrip.framework.apollo.portal.entity.vo;
...
@@ -3,18 +3,18 @@ package com.ctrip.framework.apollo.portal.entity.vo;
import
com.ctrip.framework.apollo.common.dto.ItemChangeSets
;
import
com.ctrip.framework.apollo.common.dto.ItemChangeSets
;
public
class
ItemDiffs
{
public
class
ItemDiffs
{
private
NamespaceIdentifer
namespace
;
private
NamespaceIdentif
i
er
namespace
;
private
ItemChangeSets
diffs
;
private
ItemChangeSets
diffs
;
private
String
extInfo
;
private
String
extInfo
;
public
ItemDiffs
(
NamespaceIdentifer
namespace
){
public
ItemDiffs
(
NamespaceIdentif
i
er
namespace
){
this
.
namespace
=
namespace
;
this
.
namespace
=
namespace
;
}
}
public
NamespaceIdentifer
getNamespace
()
{
public
NamespaceIdentif
i
er
getNamespace
()
{
return
namespace
;
return
namespace
;
}
}
public
void
setNamespace
(
NamespaceIdentifer
namespace
)
{
public
void
setNamespace
(
NamespaceIdentif
i
er
namespace
)
{
this
.
namespace
=
namespace
;
this
.
namespace
=
namespace
;
}
}
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/entity/vo/NamespaceIdentifer.java
→
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/entity/vo/NamespaceIdentif
i
er.java
View file @
7b7d753f
...
@@ -4,7 +4,7 @@ import com.ctrip.framework.apollo.core.enums.Env;
...
@@ -4,7 +4,7 @@ import com.ctrip.framework.apollo.core.enums.Env;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
com.ctrip.framework.apollo.portal.entity.form.Verifiable
;
import
com.ctrip.framework.apollo.portal.entity.form.Verifiable
;
public
class
NamespaceIdentifer
implements
Verifiable
{
public
class
NamespaceIdentif
i
er
implements
Verifiable
{
private
String
appId
;
private
String
appId
;
private
String
env
;
private
String
env
;
private
String
clusterName
;
private
String
clusterName
;
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppService.java
View file @
7b7d753f
...
@@ -49,7 +49,7 @@ public class AppService {
...
@@ -49,7 +49,7 @@ public class AppService {
public
List
<
App
>
findAll
()
{
public
List
<
App
>
findAll
()
{
Iterable
<
App
>
apps
=
appRepository
.
findAll
();
Iterable
<
App
>
apps
=
appRepository
.
findAll
();
if
(
apps
==
null
)
{
if
(
apps
==
null
)
{
return
Collections
.
EMPTY_LIST
;
return
Collections
.
emptyList
()
;
}
}
return
Lists
.
newArrayList
((
apps
));
return
Lists
.
newArrayList
((
apps
));
}
}
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/
Config
Service.java
→
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/
Item
Service.java
View file @
7b7d753f
...
@@ -20,7 +20,7 @@ import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
...
@@ -20,7 +20,7 @@ import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.constant.CatEventType
;
import
com.ctrip.framework.apollo.portal.constant.CatEventType
;
import
com.ctrip.framework.apollo.portal.entity.vo.ItemDiffs
;
import
com.ctrip.framework.apollo.portal.entity.vo.ItemDiffs
;
import
com.ctrip.framework.apollo.portal.entity.vo.NamespaceIdentifer
;
import
com.ctrip.framework.apollo.portal.entity.vo.NamespaceIdentif
i
er
;
import
com.ctrip.framework.apollo.portal.entity.form.NamespaceTextModel
;
import
com.ctrip.framework.apollo.portal.entity.form.NamespaceTextModel
;
import
com.ctrip.framework.apollo.portal.service.txtresolver.ConfigTextResolver
;
import
com.ctrip.framework.apollo.portal.service.txtresolver.ConfigTextResolver
;
import
com.dianping.cat.Cat
;
import
com.dianping.cat.Cat
;
...
@@ -30,7 +30,7 @@ import java.util.List;
...
@@ -30,7 +30,7 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Map
;
@Service
@Service
public
class
Config
Service
{
public
class
Item
Service
{
@Autowired
@Autowired
private
UserInfoHolder
userInfoHolder
;
private
UserInfoHolder
userInfoHolder
;
...
@@ -38,8 +38,6 @@ public class ConfigService {
...
@@ -38,8 +38,6 @@ public class ConfigService {
private
AdminServiceAPI
.
NamespaceAPI
namespaceAPI
;
private
AdminServiceAPI
.
NamespaceAPI
namespaceAPI
;
@Autowired
@Autowired
private
AdminServiceAPI
.
ItemAPI
itemAPI
;
private
AdminServiceAPI
.
ItemAPI
itemAPI
;
@Autowired
private
AdminServiceAPI
.
ReleaseAPI
releaseAPI
;
@Autowired
@Autowired
@Qualifier
(
"fileTextResolver"
)
@Qualifier
(
"fileTextResolver"
)
...
@@ -89,9 +87,11 @@ public class ConfigService {
...
@@ -89,9 +87,11 @@ public class ConfigService {
}
}
item
.
setNamespaceId
(
namespace
.
getId
());
item
.
setNamespaceId
(
namespace
.
getId
());
if
(
StringUtils
.
isEmpty
(
item
.
getDataChangeCreatedBy
())){
String
username
=
userInfoHolder
.
getUser
().
getUserId
();
String
username
=
userInfoHolder
.
getUser
().
getUserId
();
item
.
setDataChangeCreatedBy
(
username
);
item
.
setDataChangeCreatedBy
(
username
);
item
.
setDataChangeLastModifiedBy
(
username
);
item
.
setDataChangeLastModifiedBy
(
username
);
}
ItemDTO
itemDTO
=
itemAPI
.
createItem
(
appId
,
env
,
clusterName
,
namespaceName
,
item
);
ItemDTO
itemDTO
=
itemAPI
.
createItem
(
appId
,
env
,
clusterName
,
namespaceName
,
item
);
Cat
.
logEvent
(
CatEventType
.
MODIFY_NAMESPACE
,
String
.
format
(
"%s+%s+%s+%s"
,
appId
,
env
,
clusterName
,
namespaceName
));
Cat
.
logEvent
(
CatEventType
.
MODIFY_NAMESPACE
,
String
.
format
(
"%s+%s+%s+%s"
,
appId
,
env
,
clusterName
,
namespaceName
));
...
@@ -99,30 +99,36 @@ public class ConfigService {
...
@@ -99,30 +99,36 @@ public class ConfigService {
}
}
public
void
updateItem
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespaceName
,
ItemDTO
item
)
{
public
void
updateItem
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespaceName
,
ItemDTO
item
)
{
if
(
StringUtils
.
isEmpty
(
item
.
getDataChangeLastModifiedBy
())){
String
username
=
userInfoHolder
.
getUser
().
getUserId
();
String
username
=
userInfoHolder
.
getUser
().
getUserId
();
item
.
setDataChangeLastModifiedBy
(
username
);
item
.
setDataChangeLastModifiedBy
(
username
);
}
itemAPI
.
updateItem
(
appId
,
env
,
clusterName
,
namespaceName
,
item
.
getId
(),
item
);
itemAPI
.
updateItem
(
appId
,
env
,
clusterName
,
namespaceName
,
item
.
getId
(),
item
);
}
}
public
void
deleteItem
(
Env
env
,
long
itemId
)
{
public
void
deleteItem
(
Env
env
,
long
itemId
,
String
userId
)
{
itemAPI
.
deleteItem
(
env
,
itemId
,
userI
nfoHolder
.
getUser
().
getUserId
()
);
itemAPI
.
deleteItem
(
env
,
itemId
,
userI
d
);
}
}
public
List
<
ItemDTO
>
findItems
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespaceName
)
{
public
List
<
ItemDTO
>
findItems
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespaceName
)
{
return
itemAPI
.
findItems
(
appId
,
env
,
clusterName
,
namespaceName
);
return
itemAPI
.
findItems
(
appId
,
env
,
clusterName
,
namespaceName
);
}
}
public
void
syncItems
(
List
<
NamespaceIdentifer
>
comparedNamespaces
,
List
<
ItemDTO
>
sourceItems
)
{
public
ItemDTO
loadItem
(
Env
env
,
long
itemId
){
return
itemAPI
.
loadItem
(
env
,
itemId
);
}
public
void
syncItems
(
List
<
NamespaceIdentifier
>
comparedNamespaces
,
List
<
ItemDTO
>
sourceItems
)
{
List
<
ItemDiffs
>
itemDiffs
=
compare
(
comparedNamespaces
,
sourceItems
);
List
<
ItemDiffs
>
itemDiffs
=
compare
(
comparedNamespaces
,
sourceItems
);
for
(
ItemDiffs
itemDiff
:
itemDiffs
)
{
for
(
ItemDiffs
itemDiff
:
itemDiffs
)
{
NamespaceIdentif
er
namespaceIdentif
er
=
itemDiff
.
getNamespace
();
NamespaceIdentif
ier
namespaceIdentifi
er
=
itemDiff
.
getNamespace
();
ItemChangeSets
changeSets
=
itemDiff
.
getDiffs
();
ItemChangeSets
changeSets
=
itemDiff
.
getDiffs
();
changeSets
.
setDataChangeLastModifiedBy
(
userInfoHolder
.
getUser
().
getUserId
());
changeSets
.
setDataChangeLastModifiedBy
(
userInfoHolder
.
getUser
().
getUserId
());
String
appId
=
namespaceIdentifer
.
getAppId
();
String
appId
=
namespaceIdentif
i
er
.
getAppId
();
Env
env
=
namespaceIdentifer
.
getEnv
();
Env
env
=
namespaceIdentif
i
er
.
getEnv
();
String
clusterName
=
namespaceIdentifer
.
getClusterName
();
String
clusterName
=
namespaceIdentif
i
er
.
getClusterName
();
String
namespaceName
=
namespaceIdentifer
.
getNamespaceName
();
String
namespaceName
=
namespaceIdentif
i
er
.
getNamespaceName
();
itemAPI
.
updateItemsByChangeSet
(
appId
,
env
,
clusterName
,
namespaceName
,
changeSets
);
itemAPI
.
updateItemsByChangeSet
(
appId
,
env
,
clusterName
,
namespaceName
,
changeSets
);
...
@@ -130,11 +136,11 @@ public class ConfigService {
...
@@ -130,11 +136,11 @@ public class ConfigService {
}
}
}
}
public
List
<
ItemDiffs
>
compare
(
List
<
NamespaceIdentifer
>
comparedNamespaces
,
List
<
ItemDTO
>
sourceItems
)
{
public
List
<
ItemDiffs
>
compare
(
List
<
NamespaceIdentif
i
er
>
comparedNamespaces
,
List
<
ItemDTO
>
sourceItems
)
{
List
<
ItemDiffs
>
result
=
new
LinkedList
<>();
List
<
ItemDiffs
>
result
=
new
LinkedList
<>();
for
(
NamespaceIdentifer
namespace
:
comparedNamespaces
)
{
for
(
NamespaceIdentif
i
er
namespace
:
comparedNamespaces
)
{
ItemDiffs
itemDiffs
=
new
ItemDiffs
(
namespace
);
ItemDiffs
itemDiffs
=
new
ItemDiffs
(
namespace
);
try
{
try
{
...
@@ -149,11 +155,11 @@ public class ConfigService {
...
@@ -149,11 +155,11 @@ public class ConfigService {
return
result
;
return
result
;
}
}
private
long
getNamespaceId
(
NamespaceIdentif
er
namespaceIdentif
er
)
{
private
long
getNamespaceId
(
NamespaceIdentif
ier
namespaceIdentifi
er
)
{
String
appId
=
namespaceIdentifer
.
getAppId
();
String
appId
=
namespaceIdentif
i
er
.
getAppId
();
String
clusterName
=
namespaceIdentifer
.
getClusterName
();
String
clusterName
=
namespaceIdentif
i
er
.
getClusterName
();
String
namespaceName
=
namespaceIdentifer
.
getNamespaceName
();
String
namespaceName
=
namespaceIdentif
i
er
.
getNamespaceName
();
Env
env
=
namespaceIdentifer
.
getEnv
();
Env
env
=
namespaceIdentif
i
er
.
getEnv
();
NamespaceDTO
namespaceDTO
=
null
;
NamespaceDTO
namespaceDTO
=
null
;
try
{
try
{
namespaceDTO
=
namespaceAPI
.
loadNamespace
(
appId
,
env
,
clusterName
,
namespaceName
);
namespaceDTO
=
namespaceAPI
.
loadNamespace
(
appId
,
env
,
clusterName
,
namespaceName
);
...
@@ -167,7 +173,7 @@ public class ConfigService {
...
@@ -167,7 +173,7 @@ public class ConfigService {
return
namespaceDTO
.
getId
();
return
namespaceDTO
.
getId
();
}
}
private
ItemChangeSets
parseChangeSets
(
NamespaceIdentifer
namespace
,
List
<
ItemDTO
>
sourceItems
)
{
private
ItemChangeSets
parseChangeSets
(
NamespaceIdentif
i
er
namespace
,
List
<
ItemDTO
>
sourceItems
)
{
ItemChangeSets
changeSets
=
new
ItemChangeSets
();
ItemChangeSets
changeSets
=
new
ItemChangeSets
();
List
<
ItemDTO
>
List
<
ItemDTO
>
targetItems
=
targetItems
=
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/NamespaceService.java
View file @
7b7d753f
...
@@ -3,6 +3,7 @@ package com.ctrip.framework.apollo.portal.service;
...
@@ -3,6 +3,7 @@ package com.ctrip.framework.apollo.portal.service;
import
com.google.gson.Gson
;
import
com.google.gson.Gson
;
import
com.ctrip.framework.apollo.common.entity.AppNamespace
;
import
com.ctrip.framework.apollo.common.entity.AppNamespace
;
import
com.ctrip.framework.apollo.common.exception.BadRequestException
;
import
com.ctrip.framework.apollo.common.utils.BeanUtils
;
import
com.ctrip.framework.apollo.common.utils.BeanUtils
;
import
com.ctrip.framework.apollo.common.dto.ItemDTO
;
import
com.ctrip.framework.apollo.common.dto.ItemDTO
;
import
com.ctrip.framework.apollo.common.dto.NamespaceDTO
;
import
com.ctrip.framework.apollo.common.dto.NamespaceDTO
;
...
@@ -21,7 +22,6 @@ import org.slf4j.LoggerFactory;
...
@@ -21,7 +22,6 @@ import org.slf4j.LoggerFactory;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.List
;
...
@@ -36,9 +36,9 @@ public class NamespaceService {
...
@@ -36,9 +36,9 @@ public class NamespaceService {
@Autowired
@Autowired
private
UserInfoHolder
userInfoHolder
;
private
UserInfoHolder
userInfoHolder
;
@Autowired
@Autowired
private
AdminServiceAPI
.
ItemAPI
itemAPI
;
private
ItemService
itemService
;
@Autowired
@Autowired
private
AdminServiceAPI
.
ReleaseAPI
releaseAPI
;
private
ReleaseService
releaseService
;
@Autowired
@Autowired
private
AdminServiceAPI
.
NamespaceAPI
namespaceAPI
;
private
AdminServiceAPI
.
NamespaceAPI
namespaceAPI
;
@Autowired
@Autowired
...
@@ -58,6 +58,13 @@ public class NamespaceService {
...
@@ -58,6 +58,13 @@ public class NamespaceService {
return
createdNamespace
;
return
createdNamespace
;
}
}
public
NamespaceDTO
loadNamespaceBaseInfo
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespaceName
){
NamespaceDTO
namespace
=
namespaceAPI
.
loadNamespace
(
appId
,
env
,
clusterName
,
namespaceName
);
if
(
namespace
==
null
){
throw
new
BadRequestException
(
"namespaces not existed"
);
}
return
namespace
;
}
/**
/**
* load cluster all namespace info with items
* load cluster all namespace info with items
...
@@ -66,7 +73,7 @@ public class NamespaceService {
...
@@ -66,7 +73,7 @@ public class NamespaceService {
List
<
NamespaceDTO
>
namespaces
=
namespaceAPI
.
findNamespaceByCluster
(
appId
,
env
,
clusterName
);
List
<
NamespaceDTO
>
namespaces
=
namespaceAPI
.
findNamespaceByCluster
(
appId
,
env
,
clusterName
);
if
(
namespaces
==
null
||
namespaces
.
size
()
==
0
)
{
if
(
namespaces
==
null
||
namespaces
.
size
()
==
0
)
{
return
Collections
.
emptyList
(
);
throw
new
BadRequestException
(
"namespaces not existed"
);
}
}
List
<
NamespaceVO
>
namespaceVOs
=
new
LinkedList
<>();
List
<
NamespaceVO
>
namespaceVOs
=
new
LinkedList
<>();
...
@@ -86,6 +93,14 @@ public class NamespaceService {
...
@@ -86,6 +93,14 @@ public class NamespaceService {
return
namespaceVOs
;
return
namespaceVOs
;
}
}
public
NamespaceVO
loadNamespace
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespaceName
){
NamespaceDTO
namespace
=
namespaceAPI
.
loadNamespace
(
appId
,
env
,
clusterName
,
namespaceName
);
if
(
namespace
==
null
){
throw
new
BadRequestException
(
"namespaces not existed"
);
}
return
parseNamespace
(
appId
,
env
,
clusterName
,
namespace
);
}
@SuppressWarnings
(
"unchecked"
)
@SuppressWarnings
(
"unchecked"
)
private
NamespaceVO
parseNamespace
(
String
appId
,
Env
env
,
String
clusterName
,
NamespaceDTO
namespace
)
{
private
NamespaceVO
parseNamespace
(
String
appId
,
Env
env
,
String
clusterName
,
NamespaceDTO
namespace
)
{
NamespaceVO
namespaceVO
=
new
NamespaceVO
();
NamespaceVO
namespaceVO
=
new
NamespaceVO
();
...
@@ -101,13 +116,13 @@ public class NamespaceService {
...
@@ -101,13 +116,13 @@ public class NamespaceService {
//latest Release
//latest Release
ReleaseDTO
latestRelease
=
null
;
ReleaseDTO
latestRelease
=
null
;
Map
<
String
,
String
>
releaseItems
=
new
HashMap
<>();
Map
<
String
,
String
>
releaseItems
=
new
HashMap
<>();
latestRelease
=
release
API
.
loadLatestRelease
(
appId
,
env
,
clusterName
,
namespaceName
);
latestRelease
=
release
Service
.
loadLatestRelease
(
appId
,
env
,
clusterName
,
namespaceName
);
if
(
latestRelease
!=
null
)
{
if
(
latestRelease
!=
null
)
{
releaseItems
=
gson
.
fromJson
(
latestRelease
.
getConfigurations
(),
Map
.
class
);
releaseItems
=
gson
.
fromJson
(
latestRelease
.
getConfigurations
(),
Map
.
class
);
}
}
//not Release config items
//not Release config items
List
<
ItemDTO
>
items
=
item
API
.
findItems
(
appId
,
env
,
clusterName
,
namespaceName
);
List
<
ItemDTO
>
items
=
item
Service
.
findItems
(
appId
,
env
,
clusterName
,
namespaceName
);
int
modifiedItemCnt
=
0
;
int
modifiedItemCnt
=
0
;
for
(
ItemDTO
itemDTO
:
items
)
{
for
(
ItemDTO
itemDTO
:
items
)
{
...
...
apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/ReleaseService.java
View file @
7b7d753f
...
@@ -2,9 +2,11 @@ package com.ctrip.framework.apollo.portal.service;
...
@@ -2,9 +2,11 @@ package com.ctrip.framework.apollo.portal.service;
import
com.google.common.base.Objects
;
import
com.google.common.base.Objects
;
import
com.google.gson.Gson
;
import
com.google.gson.Gson
;
import
com.google.gson.reflect.TypeToken
;
import
com.ctrip.framework.apollo.common.dto.ReleaseDTO
;
import
com.ctrip.framework.apollo.common.dto.ReleaseDTO
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.core.enums.Env
;
import
com.ctrip.framework.apollo.core.utils.StringUtils
;
import
com.ctrip.framework.apollo.portal.api.AdminServiceAPI
;
import
com.ctrip.framework.apollo.portal.api.AdminServiceAPI
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.constant.CatEventType
;
import
com.ctrip.framework.apollo.portal.constant.CatEventType
;
...
@@ -19,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -19,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.util.CollectionUtils
;
import
java.lang.reflect.Type
;
import
java.util.Collections
;
import
java.util.Collections
;
import
java.util.LinkedHashSet
;
import
java.util.LinkedHashSet
;
import
java.util.LinkedList
;
import
java.util.LinkedList
;
...
@@ -28,8 +31,10 @@ import java.util.Set;
...
@@ -28,8 +31,10 @@ import java.util.Set;
@Service
@Service
public
class
ReleaseService
{
public
class
ReleaseService
{
private
static
final
Gson
gson
=
new
Gson
();
private
static
final
Gson
gson
=
new
Gson
();
private
static
final
Type
configurationTypeReference
=
new
TypeToken
<
Map
<
String
,
String
>>()
{
}.
getType
();
@Autowired
@Autowired
private
UserInfoHolder
userInfoHolder
;
private
UserInfoHolder
userInfoHolder
;
...
@@ -41,10 +46,13 @@ public class ReleaseService {
...
@@ -41,10 +46,13 @@ public class ReleaseService {
Env
env
=
model
.
getEnv
();
Env
env
=
model
.
getEnv
();
String
clusterName
=
model
.
getClusterName
();
String
clusterName
=
model
.
getClusterName
();
String
namespaceName
=
model
.
getNamespaceName
();
String
namespaceName
=
model
.
getNamespaceName
();
ReleaseDTO
releaseDTO
=
String
releaseBy
=
releaseAPI
StringUtils
.
isEmpty
(
model
.
getReleaseBy
())
?
userInfoHolder
.
getUser
().
getUserId
()
:
model
.
getReleaseBy
();
ReleaseDTO
releaseDTO
=
releaseAPI
.
createRelease
(
appId
,
env
,
clusterName
,
namespaceName
,
model
.
getReleaseTitle
(),
model
.
getReleaseComment
()
.
createRelease
(
appId
,
env
,
clusterName
,
namespaceName
,
model
.
getReleaseTitle
(),
model
.
getReleaseComment
()
,
userInfoHolder
.
getUser
().
getUserId
());
,
releaseBy
);
Cat
.
logEvent
(
CatEventType
.
RELEASE_NAMESPACE
,
String
.
format
(
"%s+%s+%s+%s"
,
appId
,
env
,
clusterName
,
namespaceName
));
Cat
.
logEvent
(
CatEventType
.
RELEASE_NAMESPACE
,
String
.
format
(
"%s+%s+%s+%s"
,
appId
,
env
,
clusterName
,
namespaceName
));
return
releaseDTO
;
return
releaseDTO
;
}
}
...
@@ -54,7 +62,7 @@ public class ReleaseService {
...
@@ -54,7 +62,7 @@ public class ReleaseService {
List
<
ReleaseDTO
>
releaseDTOs
=
releaseAPI
.
findAllReleases
(
appId
,
env
,
clusterName
,
namespaceName
,
page
,
size
);
List
<
ReleaseDTO
>
releaseDTOs
=
releaseAPI
.
findAllReleases
(
appId
,
env
,
clusterName
,
namespaceName
,
page
,
size
);
if
(
CollectionUtils
.
isEmpty
(
releaseDTOs
))
{
if
(
CollectionUtils
.
isEmpty
(
releaseDTOs
))
{
return
Collections
.
EMPTY_LIST
;
return
Collections
.
emptyList
()
;
}
}
List
<
ReleaseVO
>
releases
=
new
LinkedList
<>();
List
<
ReleaseVO
>
releases
=
new
LinkedList
<>();
...
@@ -63,7 +71,8 @@ public class ReleaseService {
...
@@ -63,7 +71,8 @@ public class ReleaseService {
release
.
setBaseInfo
(
releaseDTO
);
release
.
setBaseInfo
(
releaseDTO
);
Set
<
KVEntity
>
kvEntities
=
new
LinkedHashSet
<>();
Set
<
KVEntity
>
kvEntities
=
new
LinkedHashSet
<>();
Set
<
Map
.
Entry
>
entries
=
gson
.
fromJson
(
releaseDTO
.
getConfigurations
(),
Map
.
class
).
entrySet
();
Map
<
String
,
String
>
configurations
=
gson
.
fromJson
(
releaseDTO
.
getConfigurations
(),
configurationTypeReference
);
Set
<
Map
.
Entry
<
String
,
String
>>
entries
=
configurations
.
entrySet
();
for
(
Map
.
Entry
<
String
,
String
>
entry
:
entries
)
{
for
(
Map
.
Entry
<
String
,
String
>
entry
:
entries
)
{
kvEntities
.
add
(
new
KVEntity
(
entry
.
getKey
(),
entry
.
getValue
()));
kvEntities
.
add
(
new
KVEntity
(
entry
.
getKey
(),
entry
.
getValue
()));
}
}
...
@@ -81,6 +90,10 @@ public class ReleaseService {
...
@@ -81,6 +90,10 @@ public class ReleaseService {
return
releaseAPI
.
findActiveReleases
(
appId
,
env
,
clusterName
,
namespaceName
,
page
,
size
);
return
releaseAPI
.
findActiveReleases
(
appId
,
env
,
clusterName
,
namespaceName
,
page
,
size
);
}
}
public
ReleaseDTO
loadLatestRelease
(
String
appId
,
Env
env
,
String
clusterName
,
String
namespaceName
){
return
releaseAPI
.
loadLatestRelease
(
appId
,
env
,
clusterName
,
namespaceName
);
}
public
void
rollback
(
Env
env
,
long
releaseId
)
{
public
void
rollback
(
Env
env
,
long
releaseId
)
{
releaseAPI
.
rollback
(
env
,
releaseId
,
userInfoHolder
.
getUser
().
getUserId
());
releaseAPI
.
rollback
(
env
,
releaseId
,
userInfoHolder
.
getUser
().
getUserId
());
}
}
...
@@ -89,8 +102,8 @@ public class ReleaseService {
...
@@ -89,8 +102,8 @@ public class ReleaseService {
ReleaseDTO
firstRelease
=
releaseAPI
.
loadRelease
(
env
,
firstReleaseId
);
ReleaseDTO
firstRelease
=
releaseAPI
.
loadRelease
(
env
,
firstReleaseId
);
ReleaseDTO
secondRelease
=
releaseAPI
.
loadRelease
(
env
,
secondReleaseId
);
ReleaseDTO
secondRelease
=
releaseAPI
.
loadRelease
(
env
,
secondReleaseId
);
Map
<
String
,
String
>
firstItems
=
gson
.
fromJson
(
firstRelease
.
getConfigurations
(),
Map
.
class
);
Map
<
String
,
String
>
firstItems
=
gson
.
fromJson
(
firstRelease
.
getConfigurations
(),
configurationTypeReference
);
Map
<
String
,
String
>
secondItems
=
gson
.
fromJson
(
secondRelease
.
getConfigurations
(),
Map
.
class
);
Map
<
String
,
String
>
secondItems
=
gson
.
fromJson
(
secondRelease
.
getConfigurations
(),
configurationTypeReference
);
ReleaseCompareResult
compareResult
=
new
ReleaseCompareResult
();
ReleaseCompareResult
compareResult
=
new
ReleaseCompareResult
();
...
...
apollo-portal/src/test/java/com/ctrip/framework/apollo/openapi/filter/ConsumerAuthenticationFilterTest.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
filter
;
import
com.ctrip.framework.apollo.openapi.util.ConsumerAuthUtil
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.runners.MockitoJUnitRunner
;
import
javax.servlet.FilterChain
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
static
org
.
junit
.
Assert
.*;
import
static
org
.
mockito
.
Matchers
.
anyLong
;
import
static
org
.
mockito
.
Matchers
.
anyString
;
import
static
org
.
mockito
.
Matchers
.
eq
;
import
static
org
.
mockito
.
Mockito
.
never
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
when
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
ConsumerAuthenticationFilterTest
{
private
ConsumerAuthenticationFilter
authenticationFilter
;
@Mock
private
ConsumerAuthUtil
consumerAuthUtil
;
@Mock
private
HttpServletRequest
request
;
@Mock
private
HttpServletResponse
response
;
@Mock
private
FilterChain
filterChain
;
@Before
public
void
setUp
()
throws
Exception
{
authenticationFilter
=
new
ConsumerAuthenticationFilter
(
consumerAuthUtil
);
}
@Test
public
void
testAuthSuccessfully
()
throws
Exception
{
String
someToken
=
"someToken"
;
Long
someConsumerId
=
1L
;
when
(
request
.
getHeader
(
"Authorization"
)).
thenReturn
(
someToken
);
when
(
consumerAuthUtil
.
getConsumerId
(
someToken
)).
thenReturn
(
someConsumerId
);
authenticationFilter
.
doFilter
(
request
,
response
,
filterChain
);
verify
(
consumerAuthUtil
,
times
(
1
)).
storeConsumerId
(
request
,
someConsumerId
);
verify
(
filterChain
,
times
(
1
)).
doFilter
(
request
,
response
);
}
@Test
public
void
testAuthFailed
()
throws
Exception
{
String
someInvalidToken
=
"someInvalidToken"
;
when
(
request
.
getHeader
(
"Authorization"
)).
thenReturn
(
someInvalidToken
);
when
(
consumerAuthUtil
.
getConsumerId
(
someInvalidToken
)).
thenReturn
(
null
);
authenticationFilter
.
doFilter
(
request
,
response
,
filterChain
);
verify
(
response
,
times
(
1
)).
sendError
(
eq
(
HttpServletResponse
.
SC_UNAUTHORIZED
),
anyString
());
verify
(
consumerAuthUtil
,
never
()).
storeConsumerId
(
eq
(
request
),
anyLong
());
verify
(
filterChain
,
never
()).
doFilter
(
request
,
response
);
}
}
\ No newline at end of file
apollo-portal/src/test/java/com/ctrip/framework/apollo/openapi/service/ConsumerRolePermissionServiceTest.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
service
;
import
com.ctrip.framework.apollo.portal.AbstractIntegrationTest
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.test.context.jdbc.Sql
;
import
static
org
.
junit
.
Assert
.*;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public
class
ConsumerRolePermissionServiceTest
extends
AbstractIntegrationTest
{
@Autowired
private
ConsumerRolePermissionService
consumerRolePermissionService
;
@Before
public
void
setUp
()
throws
Exception
{
}
@Test
@Sql
(
scripts
=
"/sql/permission/insert-test-roles.sql"
,
executionPhase
=
Sql
.
ExecutionPhase
.
BEFORE_TEST_METHOD
)
@Sql
(
scripts
=
"/sql/permission/insert-test-permissions.sql"
,
executionPhase
=
Sql
.
ExecutionPhase
.
BEFORE_TEST_METHOD
)
@Sql
(
scripts
=
"/sql/permission/insert-test-consumerroles.sql"
,
executionPhase
=
Sql
.
ExecutionPhase
.
BEFORE_TEST_METHOD
)
@Sql
(
scripts
=
"/sql/permission/insert-test-rolepermissions.sql"
,
executionPhase
=
Sql
.
ExecutionPhase
.
BEFORE_TEST_METHOD
)
@Sql
(
scripts
=
"/sql/cleanup.sql"
,
executionPhase
=
Sql
.
ExecutionPhase
.
AFTER_TEST_METHOD
)
public
void
testConsumerHasPermission
()
throws
Exception
{
String
someTargetId
=
"someTargetId"
;
String
anotherTargetId
=
"anotherTargetId"
;
String
somePermissionType
=
"somePermissionType"
;
String
anotherPermissionType
=
"anotherPermissionType"
;
long
someConsumerId
=
1
;
long
anotherConsumerId
=
2
;
long
someConsumerWithNoPermission
=
3
;
assertTrue
(
consumerRolePermissionService
.
consumerHasPermission
(
someConsumerId
,
somePermissionType
,
someTargetId
));
assertTrue
(
consumerRolePermissionService
.
consumerHasPermission
(
someConsumerId
,
anotherPermissionType
,
anotherTargetId
));
assertTrue
(
consumerRolePermissionService
.
consumerHasPermission
(
anotherConsumerId
,
somePermissionType
,
someTargetId
));
assertTrue
(
consumerRolePermissionService
.
consumerHasPermission
(
anotherConsumerId
,
anotherPermissionType
,
anotherTargetId
));
assertFalse
(
consumerRolePermissionService
.
consumerHasPermission
(
someConsumerWithNoPermission
,
somePermissionType
,
someTargetId
));
assertFalse
(
consumerRolePermissionService
.
consumerHasPermission
(
someConsumerWithNoPermission
,
anotherPermissionType
,
anotherTargetId
));
}
}
\ No newline at end of file
apollo-portal/src/test/java/com/ctrip/framework/apollo/openapi/service/ConsumerServiceTest.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
service
;
import
com.ctrip.framework.apollo.openapi.entity.Consumer
;
import
com.ctrip.framework.apollo.openapi.entity.ConsumerToken
;
import
com.ctrip.framework.apollo.openapi.repository.ConsumerRepository
;
import
com.ctrip.framework.apollo.openapi.repository.ConsumerTokenRepository
;
import
com.ctrip.framework.apollo.portal.service.ServerConfigService
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.runners.MockitoJUnitRunner
;
import
org.springframework.test.util.ReflectionTestUtils
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.GregorianCalendar
;
import
static
org
.
junit
.
Assert
.*;
import
static
org
.
mockito
.
Matchers
.
any
;
import
static
org
.
mockito
.
Matchers
.
anyString
;
import
static
org
.
mockito
.
Matchers
.
eq
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
never
;
import
static
org
.
mockito
.
Mockito
.
spy
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
when
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
ConsumerServiceTest
{
private
ConsumerService
consumerService
;
@Mock
private
ConsumerTokenRepository
consumerTokenRepository
;
@Mock
private
ConsumerRepository
consumerRepository
;
@Mock
private
ServerConfigService
serverConfigService
;
private
String
someTokenSalt
;
@Before
public
void
setUp
()
throws
Exception
{
consumerService
=
spy
(
new
ConsumerService
());
ReflectionTestUtils
.
setField
(
consumerService
,
"consumerTokenRepository"
,
consumerTokenRepository
);
ReflectionTestUtils
.
setField
(
consumerService
,
"consumerRepository"
,
consumerRepository
);
ReflectionTestUtils
.
setField
(
consumerService
,
"serverConfigService"
,
serverConfigService
);
someTokenSalt
=
"someTokenSalt"
;
when
(
serverConfigService
.
getValue
(
eq
(
ConsumerService
.
TOKEN_SALT_KEY
),
anyString
())).
thenReturn
(
someTokenSalt
);
consumerService
.
afterPropertiesSet
();
}
@Test
public
void
testGetConsumerId
()
throws
Exception
{
String
someToken
=
"someToken"
;
long
someConsumerId
=
1
;
ConsumerToken
someConsumerToken
=
new
ConsumerToken
();
someConsumerToken
.
setConsumerId
(
someConsumerId
);
when
(
consumerTokenRepository
.
findTopByTokenAndExpiresAfter
(
eq
(
someToken
),
any
(
Date
.
class
)))
.
thenReturn
(
someConsumerToken
);
assertEquals
(
someConsumerId
,
consumerService
.
getConsumerIdByToken
(
someToken
).
longValue
());
}
@Test
public
void
testGetConsumerIdWithNullToken
()
throws
Exception
{
Long
consumerId
=
consumerService
.
getConsumerIdByToken
(
null
);
assertNull
(
consumerId
);
verify
(
consumerTokenRepository
,
never
()).
findTopByTokenAndExpiresAfter
(
anyString
(),
any
(
Date
.
class
));
}
@Test
public
void
testGetConsumerByConsumerId
()
throws
Exception
{
long
someConsumerId
=
1
;
Consumer
someConsumer
=
mock
(
Consumer
.
class
);
when
(
consumerRepository
.
findOne
(
someConsumerId
)).
thenReturn
(
someConsumer
);
assertEquals
(
someConsumer
,
consumerService
.
getConsumerByConsumerId
(
someConsumerId
));
verify
(
consumerRepository
,
times
(
1
)).
findOne
(
someConsumerId
);
}
@Test
public
void
testCreateConsumerToken
()
throws
Exception
{
ConsumerToken
someConsumerToken
=
mock
(
ConsumerToken
.
class
);
ConsumerToken
savedConsumerToken
=
mock
(
ConsumerToken
.
class
);
when
(
consumerTokenRepository
.
save
(
someConsumerToken
)).
thenReturn
(
savedConsumerToken
);
assertEquals
(
savedConsumerToken
,
consumerService
.
createConsumerToken
(
someConsumerToken
));
}
@Test
public
void
testGenerateConsumerToken
()
throws
Exception
{
String
someConsumerAppId
=
"100003171"
;
Date
generationTime
=
new
GregorianCalendar
(
2016
,
Calendar
.
AUGUST
,
9
,
12
,
10
,
50
).
getTime
();
String
tokenSalt
=
"apollo"
;
assertEquals
(
"d0da35292dd5079eeb73cc3a5f7c0759afabd806"
,
consumerService
.
generateConsumerToken
(
someConsumerAppId
,
generationTime
,
tokenSalt
));
}
@Test
public
void
testGenerateAndEnrichConsumerToken
()
throws
Exception
{
String
someConsumerAppId
=
"someAppId"
;
long
someConsumerId
=
1
;
String
someToken
=
"someToken"
;
Date
generationTime
=
new
Date
();
Consumer
consumer
=
mock
(
Consumer
.
class
);
when
(
consumerRepository
.
findOne
(
someConsumerId
)).
thenReturn
(
consumer
);
when
(
consumer
.
getAppId
()).
thenReturn
(
someConsumerAppId
);
when
(
consumerService
.
generateConsumerToken
(
someConsumerAppId
,
generationTime
,
someTokenSalt
))
.
thenReturn
(
someToken
);
ConsumerToken
consumerToken
=
new
ConsumerToken
();
consumerToken
.
setConsumerId
(
someConsumerId
);
consumerToken
.
setDataChangeCreatedTime
(
generationTime
);
consumerService
.
generateAndEnrichConsumerToken
(
consumerToken
);
assertEquals
(
someToken
,
consumerToken
.
getToken
());
}
@Test
(
expected
=
IllegalStateException
.
class
)
public
void
testGenerateAndEnrichConsumerTokenWithConsumerNotFound
()
throws
Exception
{
long
someConsumerIdNotExist
=
1
;
ConsumerToken
consumerToken
=
new
ConsumerToken
();
consumerToken
.
setConsumerId
(
someConsumerIdNotExist
);
when
(
consumerRepository
.
findOne
(
someConsumerIdNotExist
)).
thenReturn
(
null
);
consumerService
.
generateAndEnrichConsumerToken
(
consumerToken
);
}
}
\ No newline at end of file
apollo-portal/src/test/java/com/ctrip/framework/apollo/openapi/util/ConsumerAuthUtilTest.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
openapi
.
util
;
import
com.ctrip.framework.apollo.openapi.service.ConsumerService
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.runners.MockitoJUnitRunner
;
import
org.springframework.test.util.ReflectionTestUtils
;
import
javax.servlet.http.HttpServletRequest
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
when
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
ConsumerAuthUtilTest
{
private
ConsumerAuthUtil
consumerAuthUtil
;
@Mock
private
ConsumerService
consumerService
;
@Mock
private
HttpServletRequest
request
;
@Before
public
void
setUp
()
throws
Exception
{
consumerAuthUtil
=
new
ConsumerAuthUtil
();
ReflectionTestUtils
.
setField
(
consumerAuthUtil
,
"consumerService"
,
consumerService
);
}
@Test
public
void
testGetConsumerId
()
throws
Exception
{
String
someToken
=
"someToken"
;
Long
someConsumerId
=
1L
;
when
(
consumerService
.
getConsumerIdByToken
(
someToken
)).
thenReturn
(
someConsumerId
);
assertEquals
(
someConsumerId
,
consumerAuthUtil
.
getConsumerId
(
someToken
));
verify
(
consumerService
,
times
(
1
)).
getConsumerIdByToken
(
someToken
);
}
@Test
public
void
testStoreConsumerId
()
throws
Exception
{
long
someConsumerId
=
1L
;
consumerAuthUtil
.
storeConsumerId
(
request
,
someConsumerId
);
verify
(
request
,
times
(
1
)).
setAttribute
(
ConsumerAuthUtil
.
CONSUMER_ID
,
someConsumerId
);
}
@Test
public
void
testRetrieveConsumerId
()
throws
Exception
{
long
someConsumerId
=
1
;
when
(
request
.
getAttribute
(
ConsumerAuthUtil
.
CONSUMER_ID
)).
thenReturn
(
someConsumerId
);
assertEquals
(
someConsumerId
,
consumerAuthUtil
.
retrieveConsumerId
(
request
));
verify
(
request
,
times
(
1
)).
getAttribute
(
ConsumerAuthUtil
.
CONSUMER_ID
);
}
@Test
(
expected
=
IllegalStateException
.
class
)
public
void
testRetrieveConsumerIdWithConsumerIdNotSet
()
throws
Exception
{
consumerAuthUtil
.
retrieveConsumerId
(
request
);
}
@Test
(
expected
=
IllegalStateException
.
class
)
public
void
testRetrieveConsumerIdWithConsumerIdInvalid
()
throws
Exception
{
String
someInvalidConsumerId
=
"abc"
;
when
(
request
.
getAttribute
(
ConsumerAuthUtil
.
CONSUMER_ID
)).
thenReturn
(
someInvalidConsumerId
);
consumerAuthUtil
.
retrieveConsumerId
(
request
);
}
}
\ No newline at end of file
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractIntegrationTest.java
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
portal
;
package
com
.
ctrip
.
framework
.
apollo
.
portal
;
import
com.ctrip.framework.apollo.PortalApplication
;
import
org.junit.runner.RunWith
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.test.SpringApplicationConfiguration
;
import
org.springframework.boot.test.SpringApplicationConfiguration
;
...
...
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AllTests.java
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
portal
;
package
com
.
ctrip
.
framework
.
apollo
.
portal
;
import
com.ctrip.framework.apollo.openapi.filter.ConsumerAuthenticationFilterTest
;
import
com.ctrip.framework.apollo.openapi.service.ConsumerRolePermissionServiceTest
;
import
com.ctrip.framework.apollo.openapi.service.ConsumerServiceTest
;
import
com.ctrip.framework.apollo.openapi.util.ConsumerAuthUtilTest
;
import
com.ctrip.framework.apollo.portal.controller.ConsumerControllerTest
;
import
com.ctrip.framework.apollo.portal.service.AppNamespaceServiceTest
;
import
com.ctrip.framework.apollo.portal.service.AppNamespaceServiceTest
;
import
com.ctrip.framework.apollo.portal.service.ConfigServiceTest
;
import
com.ctrip.framework.apollo.portal.service.ConfigServiceTest
;
import
com.ctrip.framework.apollo.portal.service.NamespaceServiceTest
;
import
com.ctrip.framework.apollo.portal.service.NamespaceServiceTest
;
...
@@ -18,7 +23,9 @@ import org.junit.runners.Suite.SuiteClasses;
...
@@ -18,7 +23,9 @@ import org.junit.runners.Suite.SuiteClasses;
ConfigServiceTest
.
class
,
PropertyResolverTest
.
class
,
ConfigServiceTest
.
class
,
PropertyResolverTest
.
class
,
NamespaceServiceTest
.
class
,
ServiceExceptionTest
.
class
,
RolePermissionServiceTest
.
class
,
NamespaceServiceTest
.
class
,
ServiceExceptionTest
.
class
,
RolePermissionServiceTest
.
class
,
AppNamespaceServiceTest
.
class
,
RoleInitializationServiceTest
.
class
,
FileTextResolverTest
.
class
,
AppNamespaceServiceTest
.
class
,
RoleInitializationServiceTest
.
class
,
FileTextResolverTest
.
class
,
RetryableRestTemplateTest
.
class
RetryableRestTemplateTest
.
class
,
ConsumerRolePermissionServiceTest
.
class
,
ConsumerAuthenticationFilterTest
.
class
,
ConsumerAuthUtilTest
.
class
,
ConsumerServiceTest
.
class
,
ConsumerControllerTest
.
class
})
})
public
class
AllTests
{
public
class
AllTests
{
...
...
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ServiceExceptionTest.java
View file @
7b7d753f
...
@@ -11,51 +11,41 @@ import java.util.LinkedHashMap;
...
@@ -11,51 +11,41 @@ import java.util.LinkedHashMap;
import
java.util.Map
;
import
java.util.Map
;
import
org.junit.Assert
;
import
org.junit.Assert
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.Test
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.mockito.Mock
;
import
org.mockito.MockitoAnnotations
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.test.util.ReflectionTestUtils
;
import
org.springframework.web.client.HttpServerErrorException
;
import
org.springframework.web.client.HttpServerErrorException
;
import
org.springframework.web.client.HttpStatusCodeException
;
import
org.springframework.web.client.HttpStatusCodeException
;
import
com.ctrip.framework.apollo.common.entity.App
;
import
com.ctrip.framework.apollo.common.entity.App
;
import
com.ctrip.framework.apollo.common.utils.ExceptionUtils
;
import
com.ctrip.framework.apollo.common.dto.AppDTO
;
import
com.ctrip.framework.apollo.common.exception.ServiceException
;
import
com.ctrip.framework.apollo.common.exception.ServiceException
;
import
com.ctrip.framework.apollo.portal.controller.AppController
;
import
com.ctrip.framework.apollo.portal.controller.AppController
;
import
com.ctrip.framework.apollo.portal.service.UserService
;
import
com.ctrip.framework.apollo.portal.service.UserService
;
import
com.google.gson.Gson
;
import
com.google.gson.Gson
;
public
class
ServiceExceptionTest
extends
Abstract
Integration
Test
{
public
class
ServiceExceptionTest
extends
Abstract
Unit
Test
{
@Autowired
@InjectMocks
private
AppController
appController
;
private
AppController
appController
;
@Mock
@Mock
private
UserService
userService
;
private
UserService
userService
;
@Before
public
void
setUp
()
{
MockitoAnnotations
.
initMocks
(
this
);
ReflectionTestUtils
.
setField
(
appController
,
"userService"
,
userService
);
}
private
String
getBaseAppUrl
()
{
return
"http://localhost:"
+
port
+
"/apps"
;
}
@Test
@Test
public
void
testAdminServiceException
()
{
public
void
testAdminServiceException
()
{
String
errorMsg
=
"No available admin service"
;
String
errorCode
=
"errorCode"
;
String
status
=
"500"
;
Map
<
String
,
Object
>
errorAttributes
=
new
LinkedHashMap
<>();
Map
<
String
,
Object
>
errorAttributes
=
new
LinkedHashMap
<>();
errorAttributes
.
put
(
"status"
,
500
);
errorAttributes
.
put
(
"status"
,
status
);
errorAttributes
.
put
(
"message"
,
"No available admin service"
);
errorAttributes
.
put
(
"message"
,
errorMsg
);
errorAttributes
.
put
(
"timestamp"
,
errorAttributes
.
put
(
"timestamp"
,
LocalDateTime
.
now
().
format
(
DateTimeFormatter
.
ISO_LOCAL_DATE_TIME
));
LocalDateTime
.
now
().
format
(
DateTimeFormatter
.
ISO_LOCAL_DATE_TIME
));
errorAttributes
.
put
(
"exception"
,
ServiceException
.
class
.
getName
());
errorAttributes
.
put
(
"exception"
,
ServiceException
.
class
.
getName
());
errorAttributes
.
put
(
"errorCode"
,
"8848"
);
errorAttributes
.
put
(
"errorCode"
,
errorCode
);
HttpStatusCodeException
adminException
=
HttpStatusCodeException
adminException
=
new
HttpServerErrorException
(
HttpStatus
.
INTERNAL_SERVER_ERROR
,
"admin server error"
,
new
HttpServerErrorException
(
HttpStatus
.
INTERNAL_SERVER_ERROR
,
"admin server error"
,
...
@@ -65,12 +55,13 @@ public class ServiceExceptionTest extends AbstractIntegrationTest {
...
@@ -65,12 +55,13 @@ public class ServiceExceptionTest extends AbstractIntegrationTest {
App
app
=
generateSampleApp
();
App
app
=
generateSampleApp
();
try
{
try
{
restTemplate
.
postForEntity
(
getBaseAppUrl
(),
app
,
AppDTO
.
class
);
appController
.
create
(
app
);
}
catch
(
HttpStatusCodeException
e
)
{
}
catch
(
HttpStatusCodeException
e
)
{
@SuppressWarnings
(
"unchecked"
)
@SuppressWarnings
(
"unchecked"
)
Map
<
String
,
String
>
attr
=
new
Gson
().
fromJson
(
e
.
getResponseBodyAsString
(),
Map
.
class
);
Map
<
String
,
String
>
attr
=
new
Gson
().
fromJson
(
e
.
getResponseBodyAsString
(),
Map
.
class
);
Assert
.
assertEquals
(
"500 admin server error"
,
attr
.
get
(
"message"
));
Assert
.
assertEquals
(
errorMsg
,
attr
.
get
(
"message"
));
Assert
.
assertEquals
(
500.0
,
attr
.
get
(
"status"
));
Assert
.
assertEquals
(
errorCode
,
attr
.
get
(
"errorCode"
));
Assert
.
assertEquals
(
status
,
attr
.
get
(
"status"
));
}
}
}
}
...
...
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/controller/ConsumerControllerTest.java
0 → 100644
View file @
7b7d753f
package
com
.
ctrip
.
framework
.
apollo
.
portal
.
controller
;
import
com.ctrip.framework.apollo.openapi.entity.ConsumerToken
;
import
com.ctrip.framework.apollo.openapi.service.ConsumerService
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.entity.po.UserInfo
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.mockito.Mock
;
import
org.mockito.runners.MockitoJUnitRunner
;
import
org.springframework.test.util.ReflectionTestUtils
;
import
java.util.Date
;
import
static
org
.
junit
.
Assert
.*;
import
static
org
.
mockito
.
Matchers
.
any
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
when
;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@RunWith
(
MockitoJUnitRunner
.
class
)
public
class
ConsumerControllerTest
{
private
ConsumerController
consumerController
;
@Mock
private
ConsumerService
consumerService
;
@Mock
private
UserInfoHolder
userInfoHolder
;
@Before
public
void
setUp
()
throws
Exception
{
consumerController
=
new
ConsumerController
();
ReflectionTestUtils
.
setField
(
consumerController
,
"consumerService"
,
consumerService
);
ReflectionTestUtils
.
setField
(
consumerController
,
"userInfoHolder"
,
userInfoHolder
);
}
@Test
public
void
testCreateConsumerToken
()
throws
Exception
{
UserInfo
userInfo
=
mock
(
UserInfo
.
class
);
String
someUserId
=
"someUser"
;
ConsumerToken
consumerToken
=
mock
(
ConsumerToken
.
class
);
long
someConsumerId
=
1
;
Date
someDateExpires
=
new
Date
();
when
(
userInfo
.
getUserId
()).
thenReturn
(
someUserId
);
when
(
userInfoHolder
.
getUser
()).
thenReturn
(
userInfo
);
when
(
consumerService
.
createConsumerToken
(
any
(
ConsumerToken
.
class
))).
thenReturn
(
consumerToken
);
assertEquals
(
consumerToken
,
consumerController
.
createConsumerToken
(
someConsumerId
,
someDateExpires
));
verify
(
consumerService
,
times
(
1
)).
generateAndEnrichConsumerToken
(
any
(
ConsumerToken
.
class
));
verify
(
consumerService
,
times
(
1
)).
createConsumerToken
(
any
(
ConsumerToken
.
class
));
}
}
\ No newline at end of file
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/ConfigServiceTest.java
View file @
7b7d753f
...
@@ -10,7 +10,7 @@ import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
...
@@ -10,7 +10,7 @@ import com.ctrip.framework.apollo.portal.api.AdminServiceAPI;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.auth.UserInfoHolder
;
import
com.ctrip.framework.apollo.portal.entity.po.UserInfo
;
import
com.ctrip.framework.apollo.portal.entity.po.UserInfo
;
import
com.ctrip.framework.apollo.portal.entity.vo.ItemDiffs
;
import
com.ctrip.framework.apollo.portal.entity.vo.ItemDiffs
;
import
com.ctrip.framework.apollo.portal.entity.vo.NamespaceIdentifer
;
import
com.ctrip.framework.apollo.portal.entity.vo.NamespaceIdentif
i
er
;
import
com.ctrip.framework.apollo.portal.entity.form.NamespaceTextModel
;
import
com.ctrip.framework.apollo.portal.entity.form.NamespaceTextModel
;
import
com.ctrip.framework.apollo.portal.service.txtresolver.PropertyResolver
;
import
com.ctrip.framework.apollo.portal.service.txtresolver.PropertyResolver
;
...
@@ -44,7 +44,7 @@ public class ConfigServiceTest {
...
@@ -44,7 +44,7 @@ public class ConfigServiceTest {
private
UserInfoHolder
userInfoHolder
;
private
UserInfoHolder
userInfoHolder
;
@InjectMocks
@InjectMocks
private
Config
Service
configService
;
private
Item
Service
configService
;
@Before
@Before
public
void
setup
()
{
public
void
setup
()
{
...
@@ -100,7 +100,7 @@ public class ConfigServiceTest {
...
@@ -100,7 +100,7 @@ public class ConfigServiceTest {
String
appId
=
"6666"
,
env
=
"LOCAL"
,
clusterName
=
ConfigConsts
.
CLUSTER_NAME_DEFAULT
,
String
appId
=
"6666"
,
env
=
"LOCAL"
,
clusterName
=
ConfigConsts
.
CLUSTER_NAME_DEFAULT
,
namespaceName
=
ConfigConsts
.
NAMESPACE_APPLICATION
;
namespaceName
=
ConfigConsts
.
NAMESPACE_APPLICATION
;
List
<
NamespaceIdentif
er
>
namespaceIdentif
ers
=
generateNamespaceIdentifer
(
appId
,
env
,
clusterName
,
namespaceName
);
List
<
NamespaceIdentif
ier
>
namespaceIdentifi
ers
=
generateNamespaceIdentifer
(
appId
,
env
,
clusterName
,
namespaceName
);
NamespaceDTO
namespaceDTO
=
generateNamespaceDTO
(
appId
,
clusterName
,
namespaceName
);
NamespaceDTO
namespaceDTO
=
generateNamespaceDTO
(
appId
,
clusterName
,
namespaceName
);
when
(
namespaceAPI
.
loadNamespace
(
appId
,
Env
.
valueOf
(
env
),
clusterName
,
namespaceName
)).
thenReturn
(
namespaceDTO
);
when
(
namespaceAPI
.
loadNamespace
(
appId
,
Env
.
valueOf
(
env
),
clusterName
,
namespaceName
)).
thenReturn
(
namespaceDTO
);
...
@@ -110,7 +110,7 @@ public class ConfigServiceTest {
...
@@ -110,7 +110,7 @@ public class ConfigServiceTest {
userInfo
.
setUserId
(
"test"
);
userInfo
.
setUserId
(
"test"
);
when
(
userInfoHolder
.
getUser
()).
thenReturn
(
userInfo
);
when
(
userInfoHolder
.
getUser
()).
thenReturn
(
userInfo
);
List
<
ItemDiffs
>
itemDiffses
=
configService
.
compare
(
namespaceIdentifers
,
sourceItems
);
List
<
ItemDiffs
>
itemDiffses
=
configService
.
compare
(
namespaceIdentif
i
ers
,
sourceItems
);
assertEquals
(
1
,
itemDiffses
.
size
());
assertEquals
(
1
,
itemDiffses
.
size
());
ItemDiffs
itemDiffs
=
itemDiffses
.
get
(
0
);
ItemDiffs
itemDiffs
=
itemDiffses
.
get
(
0
);
...
@@ -141,7 +141,7 @@ public class ConfigServiceTest {
...
@@ -141,7 +141,7 @@ public class ConfigServiceTest {
String
appId
=
"6666"
,
env
=
"LOCAL"
,
clusterName
=
ConfigConsts
.
CLUSTER_NAME_DEFAULT
,
String
appId
=
"6666"
,
env
=
"LOCAL"
,
clusterName
=
ConfigConsts
.
CLUSTER_NAME_DEFAULT
,
namespaceName
=
ConfigConsts
.
NAMESPACE_APPLICATION
;
namespaceName
=
ConfigConsts
.
NAMESPACE_APPLICATION
;
List
<
NamespaceIdentif
er
>
namespaceIdentif
ers
=
generateNamespaceIdentifer
(
appId
,
env
,
clusterName
,
namespaceName
);
List
<
NamespaceIdentif
ier
>
namespaceIdentifi
ers
=
generateNamespaceIdentifer
(
appId
,
env
,
clusterName
,
namespaceName
);
NamespaceDTO
namespaceDTO
=
generateNamespaceDTO
(
appId
,
clusterName
,
namespaceName
);
NamespaceDTO
namespaceDTO
=
generateNamespaceDTO
(
appId
,
clusterName
,
namespaceName
);
when
(
namespaceAPI
.
loadNamespace
(
appId
,
Env
.
valueOf
(
env
),
clusterName
,
namespaceName
)).
thenReturn
(
namespaceDTO
);
when
(
namespaceAPI
.
loadNamespace
(
appId
,
Env
.
valueOf
(
env
),
clusterName
,
namespaceName
)).
thenReturn
(
namespaceDTO
);
...
@@ -151,7 +151,7 @@ public class ConfigServiceTest {
...
@@ -151,7 +151,7 @@ public class ConfigServiceTest {
userInfo
.
setUserId
(
"test"
);
userInfo
.
setUserId
(
"test"
);
when
(
userInfoHolder
.
getUser
()).
thenReturn
(
userInfo
);
when
(
userInfoHolder
.
getUser
()).
thenReturn
(
userInfo
);
List
<
ItemDiffs
>
itemDiffses
=
configService
.
compare
(
namespaceIdentifers
,
sourceItems
);
List
<
ItemDiffs
>
itemDiffses
=
configService
.
compare
(
namespaceIdentif
i
ers
,
sourceItems
);
assertEquals
(
1
,
itemDiffses
.
size
());
assertEquals
(
1
,
itemDiffses
.
size
());
ItemDiffs
itemDiffs
=
itemDiffses
.
get
(
0
);
ItemDiffs
itemDiffs
=
itemDiffses
.
get
(
0
);
...
@@ -161,11 +161,11 @@ public class ConfigServiceTest {
...
@@ -161,11 +161,11 @@ public class ConfigServiceTest {
assertEquals
(
2
,
changeSets
.
getUpdateItems
().
size
());
assertEquals
(
2
,
changeSets
.
getUpdateItems
().
size
());
assertEquals
(
1
,
changeSets
.
getCreateItems
().
size
());
assertEquals
(
1
,
changeSets
.
getCreateItems
().
size
());
NamespaceIdentif
er
namespaceIdentif
er
=
itemDiffs
.
getNamespace
();
NamespaceIdentif
ier
namespaceIdentifi
er
=
itemDiffs
.
getNamespace
();
assertEquals
(
appId
,
namespaceIdentifer
.
getAppId
());
assertEquals
(
appId
,
namespaceIdentif
i
er
.
getAppId
());
assertEquals
(
Env
.
valueOf
(
"LOCAL"
),
namespaceIdentifer
.
getEnv
());
assertEquals
(
Env
.
valueOf
(
"LOCAL"
),
namespaceIdentif
i
er
.
getEnv
());
assertEquals
(
clusterName
,
namespaceIdentifer
.
getClusterName
());
assertEquals
(
clusterName
,
namespaceIdentif
i
er
.
getClusterName
());
assertEquals
(
namespaceName
,
namespaceIdentifer
.
getNamespaceName
());
assertEquals
(
namespaceName
,
namespaceIdentif
i
er
.
getNamespaceName
());
ItemDTO
createdItem
=
changeSets
.
getCreateItems
().
get
(
0
);
ItemDTO
createdItem
=
changeSets
.
getCreateItems
().
get
(
0
);
assertEquals
(
"newKey"
,
createdItem
.
getKey
());
assertEquals
(
"newKey"
,
createdItem
.
getKey
());
...
@@ -198,8 +198,8 @@ public class ConfigServiceTest {
...
@@ -198,8 +198,8 @@ public class ConfigServiceTest {
return
namespaceDTO
;
return
namespaceDTO
;
}
}
private
List
<
NamespaceIdentifer
>
generateNamespaceIdentifer
(
String
appId
,
String
env
,
String
clusterName
,
String
namespaceName
){
private
List
<
NamespaceIdentif
i
er
>
generateNamespaceIdentifer
(
String
appId
,
String
env
,
String
clusterName
,
String
namespaceName
){
NamespaceIdentif
er
targetNamespace
=
new
NamespaceIdentif
er
();
NamespaceIdentif
ier
targetNamespace
=
new
NamespaceIdentifi
er
();
targetNamespace
.
setAppId
(
appId
);
targetNamespace
.
setAppId
(
appId
);
targetNamespace
.
setEnv
(
env
);
targetNamespace
.
setEnv
(
env
);
targetNamespace
.
setClusterName
(
clusterName
);
targetNamespace
.
setClusterName
(
clusterName
);
...
...
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/NamespaceServiceTest.java
View file @
7b7d753f
...
@@ -30,9 +30,9 @@ public class NamespaceServiceTest {
...
@@ -30,9 +30,9 @@ public class NamespaceServiceTest {
@Mock
@Mock
private
AdminServiceAPI
.
NamespaceAPI
namespaceAPI
;
private
AdminServiceAPI
.
NamespaceAPI
namespaceAPI
;
@Mock
@Mock
private
AdminServiceAPI
.
ReleaseAPI
releaseAPI
;
private
ReleaseService
releaseService
;
@Mock
@Mock
private
AdminServiceAPI
.
ItemAPI
itemAPI
;
private
ItemService
itemService
;
@Mock
@Mock
private
PropertyResolver
resolver
;
private
PropertyResolver
resolver
;
@Mock
@Mock
...
@@ -82,9 +82,9 @@ public class NamespaceServiceTest {
...
@@ -82,9 +82,9 @@ public class NamespaceServiceTest {
.
thenReturn
(
applicationAppNamespace
);
.
thenReturn
(
applicationAppNamespace
);
when
(
appNamespaceService
.
findPublicAppNamespace
(
"hermes"
)).
thenReturn
(
hermesAppNamespace
);
when
(
appNamespaceService
.
findPublicAppNamespace
(
"hermes"
)).
thenReturn
(
hermesAppNamespace
);
when
(
namespaceAPI
.
findNamespaceByCluster
(
appId
,
Env
.
DEV
,
clusterName
)).
thenReturn
(
namespaces
);
when
(
namespaceAPI
.
findNamespaceByCluster
(
appId
,
Env
.
DEV
,
clusterName
)).
thenReturn
(
namespaces
);
when
(
release
API
.
loadLatestRelease
(
appId
,
Env
.
DEV
,
clusterName
,
namespaceName
)).
thenReturn
(
someRelease
);
when
(
release
Service
.
loadLatestRelease
(
appId
,
Env
.
DEV
,
clusterName
,
namespaceName
)).
thenReturn
(
someRelease
);
when
(
release
API
.
loadLatestRelease
(
appId
,
Env
.
DEV
,
clusterName
,
"hermes"
)).
thenReturn
(
someRelease
);
when
(
release
Service
.
loadLatestRelease
(
appId
,
Env
.
DEV
,
clusterName
,
"hermes"
)).
thenReturn
(
someRelease
);
when
(
item
API
.
findItems
(
appId
,
Env
.
DEV
,
clusterName
,
namespaceName
)).
thenReturn
(
someItems
);
when
(
item
Service
.
findItems
(
appId
,
Env
.
DEV
,
clusterName
,
namespaceName
)).
thenReturn
(
someItems
);
List
<
NamespaceVO
>
namespaceVOs
=
namespaceService
.
findNamespaces
(
appId
,
Env
.
DEV
,
clusterName
);
List
<
NamespaceVO
>
namespaceVOs
=
namespaceService
.
findNamespaces
(
appId
,
Env
.
DEV
,
clusterName
);
assertEquals
(
2
,
namespaceVOs
.
size
());
assertEquals
(
2
,
namespaceVOs
.
size
());
...
...
apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RoleInitializationServiceTest.java
View file @
7b7d753f
...
@@ -17,6 +17,7 @@ import org.mockito.Mock;
...
@@ -17,6 +17,7 @@ import org.mockito.Mock;
import
static
org
.
mockito
.
Matchers
.
any
;
import
static
org
.
mockito
.
Matchers
.
any
;
import
static
org
.
mockito
.
Matchers
.
anySet
;
import
static
org
.
mockito
.
Matchers
.
anySet
;
import
static
org
.
mockito
.
Matchers
.
anySetOf
;
import
static
org
.
mockito
.
Matchers
.
anyString
;
import
static
org
.
mockito
.
Matchers
.
anyString
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
times
;
import
static
org
.
mockito
.
Mockito
.
verify
;
import
static
org
.
mockito
.
Mockito
.
verify
;
...
@@ -46,7 +47,7 @@ public class RoleInitializationServiceTest extends AbstractUnitTest {
...
@@ -46,7 +47,7 @@ public class RoleInitializationServiceTest extends AbstractUnitTest {
roleInitializationService
.
initAppRoles
(
mockApp
());
roleInitializationService
.
initAppRoles
(
mockApp
());
verify
(
rolePermissionService
,
times
(
1
)).
findRoleByRoleName
(
RoleUtils
.
buildAppMasterRoleName
(
APP_ID
));
verify
(
rolePermissionService
,
times
(
1
)).
findRoleByRoleName
(
RoleUtils
.
buildAppMasterRoleName
(
APP_ID
));
verify
(
rolePermissionService
,
times
(
0
)).
assignRoleToUsers
(
anyString
(),
anySet
(
),
anyString
());
verify
(
rolePermissionService
,
times
(
0
)).
assignRoleToUsers
(
anyString
(),
anySet
Of
(
String
.
class
),
anyString
());
}
}
@Test
@Test
...
@@ -62,7 +63,7 @@ public class RoleInitializationServiceTest extends AbstractUnitTest {
...
@@ -62,7 +63,7 @@ public class RoleInitializationServiceTest extends AbstractUnitTest {
verify
(
rolePermissionService
,
times
(
1
)).
assignRoleToUsers
(
verify
(
rolePermissionService
,
times
(
1
)).
assignRoleToUsers
(
RoleUtils
.
buildAppMasterRoleName
(
APP_ID
),
Sets
.
newHashSet
(
CURRENT_USER
),
CURRENT_USER
);
RoleUtils
.
buildAppMasterRoleName
(
APP_ID
),
Sets
.
newHashSet
(
CURRENT_USER
),
CURRENT_USER
);
verify
(
rolePermissionService
,
times
(
2
)).
createPermission
(
any
());
verify
(
rolePermissionService
,
times
(
2
)).
createPermission
(
any
());
verify
(
rolePermissionService
,
times
(
3
)).
createRoleWithPermissions
(
any
(),
anySet
(
));
verify
(
rolePermissionService
,
times
(
3
)).
createRoleWithPermissions
(
any
(),
anySet
Of
(
Long
.
class
));
}
}
@Test
@Test
...
@@ -80,7 +81,7 @@ public class RoleInitializationServiceTest extends AbstractUnitTest {
...
@@ -80,7 +81,7 @@ public class RoleInitializationServiceTest extends AbstractUnitTest {
verify
(
rolePermissionService
,
times
(
2
)).
findRoleByRoleName
(
anyString
());
verify
(
rolePermissionService
,
times
(
2
)).
findRoleByRoleName
(
anyString
());
verify
(
rolePermissionService
,
times
(
0
)).
createPermission
(
any
());
verify
(
rolePermissionService
,
times
(
0
)).
createPermission
(
any
());
verify
(
rolePermissionService
,
times
(
0
)).
createRoleWithPermissions
(
any
(),
anySet
(
));
verify
(
rolePermissionService
,
times
(
0
)).
createRoleWithPermissions
(
any
(),
anySet
Of
(
Long
.
class
));
}
}
@Test
@Test
...
@@ -101,7 +102,7 @@ public class RoleInitializationServiceTest extends AbstractUnitTest {
...
@@ -101,7 +102,7 @@ public class RoleInitializationServiceTest extends AbstractUnitTest {
verify
(
rolePermissionService
,
times
(
2
)).
findRoleByRoleName
(
anyString
());
verify
(
rolePermissionService
,
times
(
2
)).
findRoleByRoleName
(
anyString
());
verify
(
rolePermissionService
,
times
(
2
)).
createPermission
(
any
());
verify
(
rolePermissionService
,
times
(
2
)).
createPermission
(
any
());
verify
(
rolePermissionService
,
times
(
2
)).
createRoleWithPermissions
(
any
(),
anySet
(
));
verify
(
rolePermissionService
,
times
(
2
)).
createRoleWithPermissions
(
any
(),
anySet
Of
(
Long
.
class
));
}
}
@Test
@Test
...
@@ -122,7 +123,7 @@ public class RoleInitializationServiceTest extends AbstractUnitTest {
...
@@ -122,7 +123,7 @@ public class RoleInitializationServiceTest extends AbstractUnitTest {
verify
(
rolePermissionService
,
times
(
2
)).
findRoleByRoleName
(
anyString
());
verify
(
rolePermissionService
,
times
(
2
)).
findRoleByRoleName
(
anyString
());
verify
(
rolePermissionService
,
times
(
1
)).
createPermission
(
any
());
verify
(
rolePermissionService
,
times
(
1
)).
createPermission
(
any
());
verify
(
rolePermissionService
,
times
(
1
)).
createRoleWithPermissions
(
any
(),
anySet
(
));
verify
(
rolePermissionService
,
times
(
1
)).
createRoleWithPermissions
(
any
(),
anySet
Of
(
Long
.
class
));
}
}
private
App
mockApp
(){
private
App
mockApp
(){
...
...
apollo-portal/src/test/resources/sql/permission/insert-test-consumerroles.sql
0 → 100644
View file @
7b7d753f
INSERT
INTO
`consumerrole`
(
`Id`
,
`ConsumerId`
,
`RoleId`
,
`DataChange_CreatedBy`
,
`DataChange_LastModifiedBy`
)
VALUES
(
890
,
1
,
990
,
'someOperator'
,
'someOperator'
);
INSERT
INTO
`consumerrole`
(
`Id`
,
`ConsumerId`
,
`RoleId`
,
`DataChange_CreatedBy`
,
`DataChange_LastModifiedBy`
)
VALUES
(
891
,
2
,
990
,
'someOperator'
,
'someOperator'
);
pom.xml
View file @
7b7d753f
...
@@ -179,7 +179,7 @@
...
@@ -179,7 +179,7 @@
<dependency>
<dependency>
<groupId>
com.ctrip.framework.apollo-sso
</groupId>
<groupId>
com.ctrip.framework.apollo-sso
</groupId>
<artifactId>
apollo-sso-ctrip
</artifactId>
<artifactId>
apollo-sso-ctrip
</artifactId>
<version>
1.
0
.0
</version>
<version>
1.
1
.0
</version>
</dependency>
</dependency>
<!--third party -->
<!--third party -->
<dependency>
<dependency>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment