@ -16,6 +16,8 @@
package org.thingsboard.server.controller ;
import com.fasterxml.jackson.databind.node.ObjectNode ;
import io.swagger.annotations.ApiOperation ;
import io.swagger.annotations.ApiParam ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.security.access.prepost.PreAuthorize ;
import org.springframework.web.bind.annotation.PathVariable ;
@ -44,6 +46,7 @@ import org.thingsboard.server.service.update.UpdateService;
@RequestMapping ( "/api/admin" )
public class AdminController extends BaseController {
public static final String SYS_ADMIN_AUTHORITY_ONLY = " Available for users with System Administrator ('SYS_ADMIN') authority only." ;
@Autowired
private MailService mailService ;
@ -59,10 +62,14 @@ public class AdminController extends BaseController {
@Autowired
private UpdateService updateService ;
@ApiOperation ( value = "Get the Administration Settings object using key (getAdminSettings)" ,
notes = "Get the Administration Settings object using specified string key. Referencing non-existing key will cause an error." + SYS_ADMIN_AUTHORITY_ONLY )
@PreAuthorize ( "hasAuthority('SYS_ADMIN')" )
@RequestMapping ( value = "/settings/{key}" , method = RequestMethod . GET )
@ResponseBody
public AdminSettings getAdminSettings ( @PathVariable ( "key" ) String key ) throws ThingsboardException {
public AdminSettings getAdminSettings (
@ApiParam ( value = "A string value of the key (e.g. 'general' or 'mail')." )
@PathVariable ( "key" ) String key ) throws ThingsboardException {
try {
accessControlService . checkPermission ( getCurrentUser ( ) , Resource . ADMIN_SETTINGS , Operation . READ ) ;
AdminSettings adminSettings = checkNotNull ( adminSettingsService . findAdminSettingsByKey ( TenantId . SYS_TENANT_ID , key ) ) ;
@ -75,10 +82,17 @@ public class AdminController extends BaseController {
}
}
@ApiOperation ( value = "Get the Administration Settings object using key (getAdminSettings)" ,
notes = "Creates or Updates the Administration Settings. Platform generates random Administration Settings Id during settings creation. " +
"The Administration Settings Id will be present in the response. Specify the Administration Settings Id when you would like to update the Administration Settings. " +
"Referencing non-existing Administration Settings Id will cause an error." + SYS_ADMIN_AUTHORITY_ONLY )
@PreAuthorize ( "hasAuthority('SYS_ADMIN')" )
@RequestMapping ( value = "/settings" , method = RequestMethod . POST )
@ResponseBody
public AdminSettings saveAdminSettings ( @RequestBody AdminSettings adminSettings ) throws ThingsboardException {
public AdminSettings saveAdminSettings (
@ApiParam ( value = "A JSON value representing the Administration Settings." )
@RequestBody AdminSettings adminSettings ) throws ThingsboardException {
try {
accessControlService . checkPermission ( getCurrentUser ( ) , Resource . ADMIN_SETTINGS , Operation . WRITE ) ;
adminSettings = checkNotNull ( adminSettingsService . saveAdminSettings ( TenantId . SYS_TENANT_ID , adminSettings ) ) ;
@ -94,6 +108,8 @@ public class AdminController extends BaseController {
}
}
@ApiOperation ( value = "Get the Security Settings object" ,
notes = "Get the Security Settings object that contains password policy, etc." + SYS_ADMIN_AUTHORITY_ONLY )
@PreAuthorize ( "hasAuthority('SYS_ADMIN')" )
@RequestMapping ( value = "/securitySettings" , method = RequestMethod . GET )
@ResponseBody
@ -106,10 +122,14 @@ public class AdminController extends BaseController {
}
}
@ApiOperation ( value = "Update Security Settings (saveSecuritySettings)" ,
notes = "Updates the Security Settings object that contains password policy, etc." + SYS_ADMIN_AUTHORITY_ONLY )
@PreAuthorize ( "hasAuthority('SYS_ADMIN')" )
@RequestMapping ( value = "/securitySettings" , method = RequestMethod . POST )
@ResponseBody
public SecuritySettings saveSecuritySettings ( @RequestBody SecuritySettings securitySettings ) throws ThingsboardException {
public SecuritySettings saveSecuritySettings (
@ApiParam ( value = "A JSON value representing the Security Settings." )
@RequestBody SecuritySettings securitySettings ) throws ThingsboardException {
try {
accessControlService . checkPermission ( getCurrentUser ( ) , Resource . ADMIN_SETTINGS , Operation . WRITE ) ;
securitySettings = checkNotNull ( systemSecurityService . saveSecuritySettings ( TenantId . SYS_TENANT_ID , securitySettings ) ) ;
@ -119,14 +139,19 @@ public class AdminController extends BaseController {
}
}
@ApiOperation ( value = "Send test email (sendTestMail)" ,
notes = "Attempts to send test email to the System Administrator User using Mail Settings provided as a parameter. " +
"You may change the 'To' email in the user profile of the System Administrator. " + SYS_ADMIN_AUTHORITY_ONLY )
@PreAuthorize ( "hasAuthority('SYS_ADMIN')" )
@RequestMapping ( value = "/settings/testMail" , method = RequestMethod . POST )
public void sendTestMail ( @RequestBody AdminSettings adminSettings ) throws ThingsboardException {
public void sendTestMail (
@ApiParam ( value = "A JSON value representing the Mail Settings." )
@RequestBody AdminSettings adminSettings ) throws ThingsboardException {
try {
accessControlService . checkPermission ( getCurrentUser ( ) , Resource . ADMIN_SETTINGS , Operation . READ ) ;
adminSettings = checkNotNull ( adminSettings ) ;
if ( adminSettings . getKey ( ) . equals ( "mail" ) ) {
if ( ! adminSettings . getJsonValue ( ) . has ( "password" ) ) {
if ( ! adminSettings . getJsonValue ( ) . has ( "password" ) ) {
AdminSettings mailSettings = checkNotNull ( adminSettingsService . findAdminSettingsByKey ( TenantId . SYS_TENANT_ID , "mail" ) ) ;
( ( ObjectNode ) adminSettings . getJsonValue ( ) ) . put ( "password" , mailSettings . getJsonValue ( ) . get ( "password" ) . asText ( ) ) ;
}
@ -138,9 +163,14 @@ public class AdminController extends BaseController {
}
}
@ApiOperation ( value = "Send test sms (sendTestMail)" ,
notes = "Attempts to send test sms to the System Administrator User using SMS Settings and phone number provided as a parameters of the request. "
+ SYS_ADMIN_AUTHORITY_ONLY )
@PreAuthorize ( "hasAuthority('SYS_ADMIN')" )
@RequestMapping ( value = "/settings/testSms" , method = RequestMethod . POST )
public void sendTestSms ( @RequestBody TestSmsRequest testSmsRequest ) throws ThingsboardException {
public void sendTestSms (
@ApiParam ( value = "A JSON value representing the Test SMS request." )
@RequestBody TestSmsRequest testSmsRequest ) throws ThingsboardException {
try {
accessControlService . checkPermission ( getCurrentUser ( ) , Resource . ADMIN_SETTINGS , Operation . READ ) ;
smsService . sendTestSms ( testSmsRequest ) ;
@ -149,6 +179,9 @@ public class AdminController extends BaseController {
}
}
@ApiOperation ( value = "Check for new Platform Releases (checkUpdates)" ,
notes = "Check notifications about new platform releases. "
+ SYS_ADMIN_AUTHORITY_ONLY )
@PreAuthorize ( "hasAuthority('SYS_ADMIN')" )
@RequestMapping ( value = "/updates" , method = RequestMethod . GET )
@ResponseBody