Commit e50e6d53 authored by renjie's avatar renjie

修改返回格式

parent d20ee384
package com.edgec.browserbackend.account.controller; package com.edgec.browserbackend.account.controller;
import com.edgec.browserbackend.account.domain.*; import com.edgec.browserbackend.account.domain.*;
import com.edgec.browserbackend.account.dto.AccountResultDto;
import com.edgec.browserbackend.account.dto.BillQueryCriteriaDto; import com.edgec.browserbackend.account.dto.BillQueryCriteriaDto;
import com.edgec.browserbackend.account.exception.AccountErrorCode;
import com.edgec.browserbackend.common.auth.Securitys; import com.edgec.browserbackend.common.auth.Securitys;
import com.edgec.browserbackend.common.commons.error.ClientRequestException;
import com.edgec.browserbackend.common.commons.utils.DateConverter; import com.edgec.browserbackend.common.commons.utils.DateConverter;
import com.edgec.browserbackend.account.service.AccountService; import com.edgec.browserbackend.account.service.AccountService;
import com.edgec.browserbackend.account.service.EmailService; import com.edgec.browserbackend.account.service.EmailService;
...@@ -25,9 +28,7 @@ import java.security.Principal; ...@@ -25,9 +28,7 @@ import java.security.Principal;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Date; import java.util.*;
import java.util.Enumeration;
import java.util.List;
@RestController @RestController
@RequestMapping("account") @RequestMapping("account")
...@@ -75,13 +76,25 @@ public class AccountController { ...@@ -75,13 +76,25 @@ public class AccountController {
@RequestMapping(path = "/information", method = RequestMethod.GET) @RequestMapping(path = "/information", method = RequestMethod.GET)
public Account getAccount(Principal principal) { public AccountResultDto getAccount(Principal principal) {
return accountService.findByName(principal.getName()); return accountService.findByName(principal.getName());
} }
@RequestMapping(path = "/{name}/children/{level}", method = RequestMethod.GET) @RequestMapping(path = "/{name}/children/{level}", method = RequestMethod.GET)
public List<UserDto> getDesendentUsers(@PathVariable String name, @PathVariable int level) { public AccountResultDto getDesendentUsers(@PathVariable String name, @PathVariable int level) {
return accountService.getAllDesendentUsers(name, level); AccountResultDto accountResultDto = new AccountResultDto();
try {
List<UserDto> userDtos = accountService.getAllDesendentUsers(name, level);
accountResultDto.setStatus(0);
accountResultDto.setData(userDtos);
} catch (ClientRequestException e) {
accountResultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
accountResultDto.setStatusInfo(statusInfo);
}
return accountResultDto;
} }
// @RequestMapping(path = "/current", method = RequestMethod.DELETE) // @RequestMapping(path = "/current", method = RequestMethod.DELETE)
...@@ -90,9 +103,20 @@ public class AccountController { ...@@ -90,9 +103,20 @@ public class AccountController {
// } // }
@RequestMapping(path = "/current", method = RequestMethod.PUT) @RequestMapping(path = "/current", method = RequestMethod.PUT)
public Account saveCurrentAccount(Principal principal, @Valid @RequestBody Account account) { public AccountResultDto saveCurrentAccount(Principal principal, @Valid @RequestBody Account account) {
LimitedUsers.filterIfLimitedUser(principal); AccountResultDto accountResultDto = new AccountResultDto();
return accountService.saveChanges(principal.getName(), account); try {
Account account1 = accountService.saveChanges(principal.getName(), account);
accountResultDto.setStatus(0);
accountResultDto.setData(account1);
} catch (ClientRequestException e) {
accountResultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
accountResultDto.setStatusInfo(statusInfo);
}
return accountResultDto;
} }
@RequestMapping(path = "/authCode", method = RequestMethod.GET) @RequestMapping(path = "/authCode", method = RequestMethod.GET)
...@@ -101,17 +125,42 @@ public class AccountController { ...@@ -101,17 +125,42 @@ public class AccountController {
} }
@RequestMapping(path = "/signup", method = RequestMethod.POST) @RequestMapping(path = "/signup", method = RequestMethod.POST)
public Account createNewAccount(@Valid @RequestBody User user) { public AccountResultDto createNewAccount(@Valid @RequestBody User user) {
if (!StringUtils.isEmpty(user.getEmail())) AccountResultDto accountResultDto = new AccountResultDto();
return accountService.create(user); try {
else Account account = new Account();
return accountService.createWithSms(user); if (!StringUtils.isEmpty(user.getEmail()))
account = accountService.create(user);
else
account = accountService.createWithSms(user);
accountResultDto.setStatus(0);
accountResultDto.setData(account);
} catch (ClientRequestException e) {
accountResultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
accountResultDto.setStatusInfo(statusInfo);
}
return accountResultDto;
} }
@RequestMapping(path = "/current", method = RequestMethod.POST) @RequestMapping(path = "/current", method = RequestMethod.POST)
public Account createSubAccount(Principal principal, @Valid @RequestBody AccountDto user) { public AccountResultDto createSubAccount(Principal principal, @Valid @RequestBody AccountDto user) {
LimitedUsers.filterIfLimitedUser(principal); AccountResultDto accountResultDto = new AccountResultDto();
return accountService.createSub(principal.getName(), user); try {
LimitedUsers.filterIfLimitedUser(principal);
Account account = accountService.createSub(principal.getName(), user);
accountResultDto.setStatus(0);
accountResultDto.setData(account);
} catch (ClientRequestException e) {
accountResultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
accountResultDto.setStatusInfo(statusInfo);
}
return accountResultDto;
} }
@RequestMapping(path = "/contactus", method = RequestMethod.POST) @RequestMapping(path = "/contactus", method = RequestMethod.POST)
...@@ -166,9 +215,21 @@ public class AccountController { ...@@ -166,9 +215,21 @@ public class AccountController {
@RequestMapping(path = "/current/{child}", method = RequestMethod.PUT) @RequestMapping(path = "/current/{child}", method = RequestMethod.PUT)
public Account saveSubAccount(Principal principal, @PathVariable String child, @Valid @RequestBody AccountDto user) { public AccountResultDto saveSubAccount(Principal principal, @PathVariable String child, @Valid @RequestBody AccountDto user) {
LimitedUsers.filterIfLimitedUser(principal); AccountResultDto accountResultDto = new AccountResultDto();
return accountService.saveSub(principal.getName(), user); try {
LimitedUsers.filterIfLimitedUser(principal);
Account account1 =accountService.saveSub(principal.getName(), user);
accountResultDto.setStatus(0);
accountResultDto.setData(account1);
} catch (ClientRequestException e) {
accountResultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
accountResultDto.setStatusInfo(statusInfo);
}
return accountResultDto;
} }
@RequestMapping(path = "/current/updatetoken", method = RequestMethod.POST) @RequestMapping(path = "/current/updatetoken", method = RequestMethod.POST)
...@@ -177,14 +238,37 @@ public class AccountController { ...@@ -177,14 +238,37 @@ public class AccountController {
} }
@RequestMapping(path = "/current/{child}", method = RequestMethod.DELETE) @RequestMapping(path = "/current/{child}", method = RequestMethod.DELETE)
public void deleteSubAccount(Principal principal, @PathVariable String child) { public AccountResultDto deleteSubAccount(Principal principal, @PathVariable String child) {
LimitedUsers.filterIfLimitedUser(principal); AccountResultDto accountResultDto = new AccountResultDto();
accountService.deleteSub(principal.getName(), child); try {
LimitedUsers.filterIfLimitedUser(principal);
accountService.deleteSub(principal.getName(), child);
accountResultDto.setStatus(0);
}catch (ClientRequestException e) {
accountResultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
accountResultDto.setStatusInfo(statusInfo);
}
return accountResultDto;
} }
@RequestMapping(path = "/reset", method = RequestMethod.POST) @RequestMapping(path = "/reset", method = RequestMethod.POST)
public void forgetPassword(@Valid @RequestBody UserDto user) { public AccountResultDto forgetPassword(@Valid @RequestBody UserDto user) {
accountService.resetPassword(user); AccountResultDto accountResultDto = new AccountResultDto();
try {
accountService.resetPassword(user);
accountResultDto.setStatus(0);
}catch (ClientRequestException e) {
accountResultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
accountResultDto.setStatusInfo(statusInfo);
}
return accountResultDto;
} }
@RequestMapping(path = "/deter/{text}", method = RequestMethod.GET) @RequestMapping(path = "/deter/{text}", method = RequestMethod.GET)
...@@ -193,8 +277,19 @@ public class AccountController { ...@@ -193,8 +277,19 @@ public class AccountController {
} }
@RequestMapping(path = "/resetwithotp", method = RequestMethod.POST) @RequestMapping(path = "/resetwithotp", method = RequestMethod.POST)
public void resetWithOtp(@Valid @RequestBody UserDto user) { public AccountResultDto resetWithOtp(@Valid @RequestBody UserDto user) {
accountService.resetPasswordWithOtp(user); AccountResultDto accountResultDto = new AccountResultDto();
try {
accountService.resetPasswordWithOtp(user);
accountResultDto.setStatus(0);
}catch (ClientRequestException e) {
accountResultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
accountResultDto.setStatusInfo(statusInfo);
}
return accountResultDto;
} }
@RequestMapping(path = "/0xwxpayputorder/{amount}", method = RequestMethod.GET) @RequestMapping(path = "/0xwxpayputorder/{amount}", method = RequestMethod.GET)
......
...@@ -38,7 +38,9 @@ public class Account { ...@@ -38,7 +38,9 @@ public class Account {
private boolean allowedToCreateSubUser = false; private boolean allowedToCreateSubUser = false;
private boolean hasOperationRight = false; private int permission = 00000000;
private List<String> whiteList = new ArrayList<>();
public Date getSignupDate() { public Date getSignupDate() {
return signupDate; return signupDate;
...@@ -66,7 +68,8 @@ public class Account { ...@@ -66,7 +68,8 @@ public class Account {
this.setEmail(account.getEmail()); this.setEmail(account.getEmail());
this.setJobTitle(account.getJobTitle()); this.setJobTitle(account.getJobTitle());
this.setPhoneNumber(account.getPhoneNumber()); this.setPhoneNumber(account.getPhoneNumber());
this.setHasOperationRight(account.isHasOperationRight()); this.setPermission(account.getPermission());
this.setWhiteList(account.getWhiteList());
} }
public String getEmail() { public String getEmail() {
...@@ -160,11 +163,19 @@ public class Account { ...@@ -160,11 +163,19 @@ public class Account {
this.token = token; this.token = token;
} }
public boolean isHasOperationRight() { public int getPermission() {
return hasOperationRight; return permission;
}
public void setPermission(int permission) {
this.permission = permission;
}
public List<String> getWhiteList() {
return whiteList;
} }
public void setHasOperationRight(boolean hasOperationRight) { public void setWhiteList(List<String> whiteList) {
this.hasOperationRight = hasOperationRight; this.whiteList = whiteList;
} }
} }
...@@ -26,7 +26,7 @@ public class AccountDto { ...@@ -26,7 +26,7 @@ public class AccountDto {
private boolean allowedToCreateSubUser; private boolean allowedToCreateSubUser;
private boolean hasOperationRight = false; private int permission;
private int balance; private int balance;
...@@ -36,6 +36,8 @@ public class AccountDto { ...@@ -36,6 +36,8 @@ public class AccountDto {
private String token; private String token;
private List<String> whiteList = new ArrayList<>();
public AccountDto(){ public AccountDto(){
} }
...@@ -49,6 +51,8 @@ public class AccountDto { ...@@ -49,6 +51,8 @@ public class AccountDto {
this.setPhoneNumber(account.getPhoneNumber()); this.setPhoneNumber(account.getPhoneNumber());
this.setParent(account.getParent()); this.setParent(account.getParent());
this.setToken(account.getToken()); this.setToken(account.getToken());
this.setPermission(account.getPermission());
this.setWhiteList(account.getWhiteList());
} }
public boolean isPrePaid() { public boolean isPrePaid() {
...@@ -67,12 +71,20 @@ public class AccountDto { ...@@ -67,12 +71,20 @@ public class AccountDto {
this.balance = balance; this.balance = balance;
} }
public boolean isHasOperationRight() { public int getPermission() {
return hasOperationRight; return permission;
}
public void setPermission(int permission) {
this.permission = permission;
}
public List<String> getWhiteList() {
return whiteList;
} }
public void setHasOperationRight(boolean hasOperationRight) { public void setWhiteList(List<String> whiteList) {
this.hasOperationRight = hasOperationRight; this.whiteList = whiteList;
} }
public String getName() { public String getName() {
......
...@@ -3,6 +3,8 @@ package com.edgec.browserbackend.account.domain; ...@@ -3,6 +3,8 @@ package com.edgec.browserbackend.account.domain;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Email; import javax.validation.constraints.Email;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID; import java.util.UUID;
public class User { public class User {
...@@ -42,8 +44,9 @@ public class User { ...@@ -42,8 +44,9 @@ public class User {
private boolean allowedToCreateSubUser = true; private boolean allowedToCreateSubUser = true;
private boolean hasOperationRight = false; private int permission;
private List<String> whiteList = new ArrayList<>();
private String verificationCode= UUID.randomUUID().toString(); private String verificationCode= UUID.randomUUID().toString();
...@@ -96,12 +99,12 @@ public class User { ...@@ -96,12 +99,12 @@ public class User {
allowedToCreateSubUser = allowedToCreateSubUser; allowedToCreateSubUser = allowedToCreateSubUser;
} }
public boolean isHasOperationRight() { public int getPermission() {
return hasOperationRight; return permission;
} }
public void setHasOperationRight(boolean hasOperationRight) { public void setPermission(int permission) {
this.hasOperationRight = hasOperationRight; this.permission = permission;
} }
public String getLockReason() { public String getLockReason() {
...@@ -111,4 +114,12 @@ public class User { ...@@ -111,4 +114,12 @@ public class User {
public void setLockReason(String lockReason) { public void setLockReason(String lockReason) {
this.lockReason = lockReason; this.lockReason = lockReason;
} }
public List<String> getWhiteList() {
return whiteList;
}
public void setWhiteList(List<String> whiteList) {
this.whiteList = whiteList;
}
} }
package com.edgec.browserbackend.account.dto;
import java.util.Map;
public class AccountResultDto {
private int status;
private Map<String, Object> statusInfo;
private Object data;
public int getStatus() {
return status;
}
public void setData(Object data) {
this.data = data;
}
public Map<String, Object> getStatusInfo() {
return statusInfo;
}
public void setStatus(int status) {
this.status = status;
}
public Object getData() {
return data;
}
public void setStatusInfo(Map<String, Object> statusInfo) {
this.statusInfo = statusInfo;
}
}
package com.edgec.browserbackend.account.service; package com.edgec.browserbackend.account.service;
import com.edgec.browserbackend.account.domain.*; import com.edgec.browserbackend.account.domain.*;
import com.edgec.browserbackend.account.dto.AccountResultDto;
import com.edgec.browserbackend.account.dto.BillQueryCriteriaDto; import com.edgec.browserbackend.account.dto.BillQueryCriteriaDto;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
...@@ -16,7 +17,7 @@ public interface AccountService { ...@@ -16,7 +17,7 @@ public interface AccountService {
* @param accountName * @param accountName
* @return found account * @return found account
*/ */
Account findByName(String accountName); AccountResultDto findByName(String accountName);
/** /**
* Checks if account with the same name already exists * Checks if account with the same name already exists
...@@ -86,8 +87,6 @@ public interface AccountService { ...@@ -86,8 +87,6 @@ public interface AccountService {
Page<Account> listAccountBySingupDate(Pageable pageable, Date beginDate, Date endDate); Page<Account> listAccountBySingupDate(Pageable pageable, Date beginDate, Date endDate);
Account findByName(String accountName, boolean isVpsUser);
List<UserBillList> findOverviewByYearAndMonth(String username, int year, int mont, String zoneId, Services service); List<UserBillList> findOverviewByYearAndMonth(String username, int year, int mont, String zoneId, Services service);
IpChargeResultDto preOrder(String userName, IpChargeRequestDto requestDto); IpChargeResultDto preOrder(String userName, IpChargeRequestDto requestDto);
......
package com.edgec.browserbackend.account.service.impl; package com.edgec.browserbackend.account.service.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.edgec.browserbackend.account.dto.AccountResultDto;
import com.edgec.browserbackend.account.dto.CvmChargeRegion; import com.edgec.browserbackend.account.dto.CvmChargeRegion;
import com.edgec.browserbackend.account.service.AccountService; import com.edgec.browserbackend.account.service.AccountService;
import com.edgec.browserbackend.account.service.PaymentService; import com.edgec.browserbackend.account.service.PaymentService;
...@@ -486,16 +487,34 @@ public class AccountServiceImpl implements AccountService { ...@@ -486,16 +487,34 @@ public class AccountServiceImpl implements AccountService {
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override @Override
public Account findByName(String accountName) { public AccountResultDto findByName(String accountName) {
Assert.hasLength(accountName); Assert.hasLength(accountName);
Account account = repository.findByName(accountName); AccountResultDto accountResultDto = new AccountResultDto();
if (account == null) { try {
return null; Account account = repository.findByName(accountName);
} if (account == null) {
if (StringUtils.isEmpty(account.getParent())) { accountResultDto.setStatus(-1);
account.setAllowedToCreateSubUser(true); Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", AccountErrorCode.NAMENOTEXIST);
statusInfo.put("message", (new ClientRequestException(AccountErrorCode.NAMENOTEXIST)).getMessage());
accountResultDto.setStatusInfo(statusInfo);
}
if (StringUtils.isEmpty(account.getParent())) {
account.setAllowedToCreateSubUser(true);
}
Optional<UserBalance> userBalance = userBalanceRepository.findById(accountName);
AccountDto accountDto = new AccountDto(account);
accountDto.setBalance((int)userBalance.get().getBalanced());
accountResultDto.setStatus(0);
accountResultDto.setData(accountDto);
} catch (Exception e) {
accountResultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", AccountErrorCode.NAMENOTEXIST);
statusInfo.put("message", (new ClientRequestException(AccountErrorCode.NAMENOTEXIST)).getMessage());
accountResultDto.setStatusInfo(statusInfo);
} }
return account; return accountResultDto;
} }
...@@ -600,10 +619,10 @@ public class AccountServiceImpl implements AccountService { ...@@ -600,10 +619,10 @@ public class AccountServiceImpl implements AccountService {
if (StringUtils.isEmpty(parentName)) { if (StringUtils.isEmpty(parentName)) {
account.setAllowedToCreateSubUser(true); account.setAllowedToCreateSubUser(true);
account.setHasOperationRight(true); account.setPermission(Integer.valueOf("1111",2));
} else { } else {
account.setAllowedToCreateSubUser(user.isAllowedToCreateSubUser()); account.setAllowedToCreateSubUser(user.isAllowedToCreateSubUser());
account.setHasOperationRight(user.isHasOperationRight()); account.setPermission(user.getPermission());
} }
account.setParent(parentName); account.setParent(parentName);
...@@ -707,7 +726,7 @@ public class AccountServiceImpl implements AccountService { ...@@ -707,7 +726,7 @@ public class AccountServiceImpl implements AccountService {
authUser.setPhone(user.getPhoneNumber()); authUser.setPhone(user.getPhoneNumber());
authUser.setEmail(user.getEmail()); authUser.setEmail(user.getEmail());
authUser.setEnabled(true); authUser.setEnabled(true);
authUser.setHasOperationRight(user.isHasOperationRight()); authUser.setPermission(user.getPermission());
userAuthService.create(new com.edgec.browserbackend.auth.domain.User(authUser)); userAuthService.create(new com.edgec.browserbackend.auth.domain.User(authUser));
Account account = new Account(user); Account account = new Account(user);
...@@ -731,7 +750,7 @@ public class AccountServiceImpl implements AccountService { ...@@ -731,7 +750,7 @@ public class AccountServiceImpl implements AccountService {
childAccount.setPhoneNumber(user.getPhoneNumber()); childAccount.setPhoneNumber(user.getPhoneNumber());
childAccount.setJobTitle(user.getJobTitle()); childAccount.setJobTitle(user.getJobTitle());
childAccount.setCompanyName(user.getCompanyName()); childAccount.setCompanyName(user.getCompanyName());
childAccount.setHasOperationRight(user.isHasOperationRight()); childAccount.setPermission(user.getPermission());
repository.save(childAccount); repository.save(childAccount);
return childAccount; return childAccount;
} }
...@@ -752,7 +771,7 @@ public class AccountServiceImpl implements AccountService { ...@@ -752,7 +771,7 @@ public class AccountServiceImpl implements AccountService {
account.setJobTitle(update.getJobTitle()); account.setJobTitle(update.getJobTitle());
// account.setPhoneNumber(update.getPhoneNumber()); // account.setPhoneNumber(update.getPhoneNumber());
account.setEmail(update.getEmail()); account.setEmail(update.getEmail());
account.setHasOperationRight(update.isHasOperationRight()); account.setPermission(update.getPermission());
log.debug("account {} changes has been saved", name); log.debug("account {} changes has been saved", name);
if (!org.apache.commons.lang3.StringUtils.equalsIgnoreCase(preEmail, update.getEmail())) { if (!org.apache.commons.lang3.StringUtils.equalsIgnoreCase(preEmail, update.getEmail())) {
Account account1 = repository.findByEmail(update.getEmail()); Account account1 = repository.findByEmail(update.getEmail());
...@@ -928,11 +947,6 @@ public class AccountServiceImpl implements AccountService { ...@@ -928,11 +947,6 @@ public class AccountServiceImpl implements AccountService {
return repository.findAllBySignupDateBetween(pageable, beginDate, endDate); return repository.findAllBySignupDateBetween(pageable, beginDate, endDate);
} }
@Override
public Account findByName(String accountName, boolean isVpsUser) {
return repository.findByName(accountName);
}
@Override @Override
public List<UserBillList> findOverviewByYearAndMonth(String username, int year, int month, String zoneId, Services service) { public List<UserBillList> findOverviewByYearAndMonth(String username, int year, int month, String zoneId, Services service) {
List<UserBillList> userBillLists = new ArrayList<>(); List<UserBillList> userBillLists = new ArrayList<>();
......
package com.edgec.browserbackend.browser.controller;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ShopController {
}
package com.edgec.browserbackend.browser.service.Impl;
import com.edgec.browserbackend.browser.service.ShopService;
public class ShopServiceImpl implements ShopService {
}
package com.edgec.browserbackend.browser.service;
public interface ShopService {
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment