Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
项目统一框架
amos-boot-biz
Commits
149e6316
Commit
149e6316
authored
Oct 13, 2022
by
tangwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加密码验证
parent
13d1f3bc
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
144 additions
and
0 deletions
+144
-0
RedisClusterConfig.java
...va/com/yeejoin/equipmanage/config/RedisClusterConfig.java
+4
-0
RedisClusterConfig.java
...n/amos/boot/module/jcs/biz/config/RedisClusterConfig.java
+5
-0
RedisClusterConfig.java
...yeejoin/amos/knowledgebase/config/RedisClusterConfig.java
+4
-0
RedisClusterConfig.java
.../yeejoin/amos/latentdanger/config/RedisClusterConfig.java
+4
-0
RedisClusterConfig.java
...m/yeejoin/amos/maintenance/config/RedisClusterConfig.java
+4
-0
RedisClusterConfig.java
...va/com/yeejoin/amos/patrol/config/RedisClusterConfig.java
+4
-0
RedisClusterConfig.java
...m/yeejoin/amos/supervision/config/RedisClusterConfig.java
+4
-0
RedisClusterConfig.java
...ava/com/yeejoin/amos/jpush/config/RedisClusterConfig.java
+47
-0
RedisConfigProperties.java
.../com/yeejoin/amos/jpush/config/RedisConfigProperties.java
+63
-0
RedisClusterConfig.java
...ava/com/yeejoin/amos/video/config/RedisClusterConfig.java
+5
-0
No files found.
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/config/RedisClusterConfig.java
View file @
149e6316
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
.
build
();
.
build
();
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
redisConfigProperties
.
getCluster
().
getNodes
());
redisConfigProperties
.
getCluster
().
getNodes
());
if
(
StringUtils
.
isNotBlank
(
redisConfigProperties
.
getPassword
()))
{
redisClusterConfiguration
.
setPassword
(
redisConfigProperties
.
getPassword
());
}
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
}
}
}
}
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-jcs-biz/src/main/java/com/yeejoin/amos/boot/module/jcs/biz/config/RedisClusterConfig.java
View file @
149e6316
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
...
@@ -37,6 +38,10 @@ public class RedisClusterConfig {
...
@@ -37,6 +38,10 @@ public class RedisClusterConfig {
.
build
();
.
build
();
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
redisConfigProperties
.
getCluster
().
getNodes
());
redisConfigProperties
.
getCluster
().
getNodes
());
if
(
StringUtils
.
isNotBlank
(
redisConfigProperties
.
getPassword
()))
{
redisClusterConfiguration
.
setPassword
(
redisConfigProperties
.
getPassword
());
}
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
}
}
}
}
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-knowledgebase-biz/src/main/java/com/yeejoin/amos/knowledgebase/config/RedisClusterConfig.java
View file @
149e6316
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
.
build
();
.
build
();
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
redisConfigProperties
.
getCluster
().
getNodes
());
redisConfigProperties
.
getCluster
().
getNodes
());
if
(
StringUtils
.
isNotBlank
(
redisConfigProperties
.
getPassword
()))
{
redisClusterConfiguration
.
setPassword
(
redisConfigProperties
.
getPassword
());
}
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
}
}
}
}
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-latentdanger-biz/src/main/java/com/yeejoin/amos/latentdanger/config/RedisClusterConfig.java
View file @
149e6316
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
.
build
();
.
build
();
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
redisConfigProperties
.
getCluster
().
getNodes
());
redisConfigProperties
.
getCluster
().
getNodes
());
if
(
StringUtils
.
isNotBlank
(
redisConfigProperties
.
getPassword
()))
{
redisClusterConfiguration
.
setPassword
(
redisConfigProperties
.
getPassword
());
}
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
}
}
}
}
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-maintenance-biz/src/main/java/com/yeejoin/amos/maintenance/config/RedisClusterConfig.java
View file @
149e6316
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
.
build
();
.
build
();
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
redisConfigProperties
.
getCluster
().
getNodes
());
redisConfigProperties
.
getCluster
().
getNodes
());
if
(
StringUtils
.
isNotBlank
(
redisConfigProperties
.
getPassword
()))
{
redisClusterConfiguration
.
setPassword
(
redisConfigProperties
.
getPassword
());
}
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
}
}
}
}
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-patrol-biz/src/main/java/com/yeejoin/amos/patrol/config/RedisClusterConfig.java
View file @
149e6316
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
.
build
();
.
build
();
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
redisConfigProperties
.
getCluster
().
getNodes
());
redisConfigProperties
.
getCluster
().
getNodes
());
if
(
StringUtils
.
isNotBlank
(
redisConfigProperties
.
getPassword
()))
{
redisClusterConfiguration
.
setPassword
(
redisConfigProperties
.
getPassword
());
}
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
}
}
}
}
...
...
amos-boot-module/amos-boot-module-biz/amos-boot-module-supervision-biz/src/main/java/com/yeejoin/amos/supervision/config/RedisClusterConfig.java
View file @
149e6316
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
...
@@ -37,6 +38,9 @@ public class RedisClusterConfig {
.
build
();
.
build
();
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
redisConfigProperties
.
getCluster
().
getNodes
());
redisConfigProperties
.
getCluster
().
getNodes
());
if
(
StringUtils
.
isNotBlank
(
redisConfigProperties
.
getPassword
()))
{
redisClusterConfiguration
.
setPassword
(
redisConfigProperties
.
getPassword
());
}
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
}
}
}
}
...
...
amos-boot-utils/amos-boot-utils-jpush/src/main/java/com/yeejoin/amos/jpush/config/RedisClusterConfig.java
0 → 100644
View file @
149e6316
package
com
.
yeejoin
.
amos
.
jpush
.
config
;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.data.redis.connection.RedisClusterConfiguration
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration
;
import
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
;
import
java.time.Duration
;
@Configuration
public
class
RedisClusterConfig
{
@Autowired
private
RedisConfigProperties
redisConfigProperties
;
@Bean
@ConditionalOnProperty
(
name
=
"spring.redis.mode"
,
havingValue
=
"cluster"
)
public
RedisConnectionFactory
redisConnectionFactory
()
{
// 开启自适应集群拓扑刷新和周期拓扑刷新,不开启相应槽位主节点挂掉会出现服务不可用,直到挂掉节点重新恢复
ClusterTopologyRefreshOptions
clusterTopologyRefreshOptions
=
ClusterTopologyRefreshOptions
.
builder
()
.
enableAllAdaptiveRefreshTriggers
()
// 开启自适应刷新,自适应刷新不开启,Redis集群变更时将会导致连接异常
.
adaptiveRefreshTriggersTimeout
(
Duration
.
ofSeconds
(
30
))
//自适应刷新超时时间(默认30秒),默认关闭开启后时间为30秒
.
enablePeriodicRefresh
(
Duration
.
ofSeconds
(
20
))
// 默认关闭开启后时间为60秒 ClusterTopologyRefreshOptions.DEFAULT_REFRESH_PERIOD 60 .enablePeriodicRefresh(Duration.ofSeconds(2)) = .enablePeriodicRefresh().refreshPeriod(Duration.ofSeconds(2))
.
build
();
ClientOptions
clientOptions
=
ClusterClientOptions
.
builder
()
.
topologyRefreshOptions
(
clusterTopologyRefreshOptions
)
.
build
();
// 客户端读写分离配置
LettuceClientConfiguration
clientConfig
=
LettuceClientConfiguration
.
builder
()
.
clientOptions
(
clientOptions
)
.
build
();
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
redisConfigProperties
.
getCluster
().
getNodes
());
if
(
StringUtils
.
isNotBlank
(
redisConfigProperties
.
getPassword
()))
{
redisClusterConfiguration
.
setPassword
(
redisConfigProperties
.
getPassword
());
}
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
}
}
amos-boot-utils/amos-boot-utils-jpush/src/main/java/com/yeejoin/amos/jpush/config/RedisConfigProperties.java
0 → 100644
View file @
149e6316
package
com
.
yeejoin
.
amos
.
jpush
.
config
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
/**
* @description:
* @author: tw
* @createDate: 2022/9/7
*/
@Component
@ConfigurationProperties
(
prefix
=
"spring.redis"
)
public
class
RedisConfigProperties
{
private
String
password
;
private
cluster
cluster
;
private
String
redissonUrl
;
private
String
mode
;
public
static
class
cluster
{
private
List
<
String
>
nodes
;
public
List
<
String
>
getNodes
()
{
return
nodes
;
}
public
void
setNodes
(
List
<
String
>
nodes
)
{
this
.
nodes
=
nodes
;
}
}
public
String
getPassword
()
{
return
password
;
}
public
void
setPassword
(
String
password
)
{
this
.
password
=
password
;
}
public
RedisConfigProperties
.
cluster
getCluster
()
{
return
cluster
;
}
public
void
setCluster
(
RedisConfigProperties
.
cluster
cluster
)
{
this
.
cluster
=
cluster
;
}
public
String
getRedissonUrl
()
{
return
redissonUrl
;
}
public
void
setRedissonUrl
(
String
redissonUrl
)
{
this
.
redissonUrl
=
redissonUrl
;
}
public
String
getMode
()
{
return
mode
;
}
public
void
setMode
(
String
mode
)
{
this
.
mode
=
mode
;
}
}
amos-boot-utils/amos-boot-utils-video/src/main/java/com/yeejoin/amos/video/config/RedisClusterConfig.java
View file @
149e6316
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
...
@@ -3,6 +3,7 @@ import com.yeejoin.amos.boot.biz.config.RedisConfigProperties;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.ClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterClientOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
io.lettuce.core.cluster.ClusterTopologyRefreshOptions
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
...
@@ -35,8 +36,12 @@ public class RedisClusterConfig {
...
@@ -35,8 +36,12 @@ public class RedisClusterConfig {
LettuceClientConfiguration
clientConfig
=
LettuceClientConfiguration
.
builder
()
LettuceClientConfiguration
clientConfig
=
LettuceClientConfiguration
.
builder
()
.
clientOptions
(
clientOptions
)
.
clientOptions
(
clientOptions
)
.
build
();
.
build
();
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
RedisClusterConfiguration
redisClusterConfiguration
=
new
RedisClusterConfiguration
(
redisConfigProperties
.
getCluster
().
getNodes
());
redisConfigProperties
.
getCluster
().
getNodes
());
if
(
StringUtils
.
isNotBlank
(
redisConfigProperties
.
getPassword
()))
{
redisClusterConfiguration
.
setPassword
(
redisConfigProperties
.
getPassword
());
}
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
return
new
LettuceConnectionFactory
(
redisClusterConfiguration
,
clientConfig
);
}
}
}
}
...
...
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