swagger_device_controller: fix bug example request - X509, MQTT_BASIC
This commit is contained in:
		
							parent
							
								
									2986700795
								
							
						
					
					
						commit
						7ff353a4d9
					
				@ -15,6 +15,16 @@
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.controller;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.nio.file.Files;
 | 
			
		||||
import java.nio.file.Paths;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.regex.Matcher;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
import static org.thingsboard.server.common.msg.EncryptionUtil.certTrimNewLinesForChainInDeviceProfile;
 | 
			
		||||
 | 
			
		||||
public class ControllerConstants {
 | 
			
		||||
 | 
			
		||||
    protected static final String NEW_LINE = "\n\n";
 | 
			
		||||
@ -236,7 +246,59 @@ public class ControllerConstants {
 | 
			
		||||
                    "   }\n" +
 | 
			
		||||
                    "}";
 | 
			
		||||
 | 
			
		||||
   protected static final String CREDENTIALS_VALUE_LVM2M_RPK_DESCRIPTION =
 | 
			
		||||
    protected static final String[] getCertificateValue() {
 | 
			
		||||
        String filePath = "src/test/resources/provision/x509ChainProvisionTest.pem";
 | 
			
		||||
        try {
 | 
			
		||||
            String certificateChain = Files.readString(Paths.get(filePath));
 | 
			
		||||
            certificateChain = certTrimNewLinesForChainInDeviceProfile(certificateChain);
 | 
			
		||||
            return fetchLeafCertificateFromChain(certificateChain);
 | 
			
		||||
        } catch (IOException e) {
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected static final String certificateValue = "\"-----BEGIN CERTIFICATE----- " +
 | 
			
		||||
        "MIICMTCCAdegAwIBAgIUI9dBuwN6pTtK6uZ03rkiCwV4wEYwCgYIKoZIzj0EAwIwbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMRowGAYDVQQKDBFUaGluZ3NCb2FyZCwgSW5jLjEwMC4GA1UEAwwnZGV2aWNlQ2VydGlmaWNhdGVAWDUwOVByb3Zpc2lvblN0cmF0ZWd5MB4XDTIzMDMyOTE0NTYxN1oXDTI0MDMyODE0NTYxN1owbjELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZb3JrMRowGAYDVQQKDBFUaGluZ3NCb2FyZCwgSW5jLjEwMC4GA1UEAwwnZGV2aWNlQ2VydGlmaWNhdGVAWDUwOVByb3Zpc2lvblN0cmF0ZWd5MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9Zo791qKQiGNBm11r4ZGxh+w+ossZL3xc46ufq5QckQHP7zkD2XDAcmP5GvdkM1sBFN9AWaCkQfNnWmfERsOOKNTMFEwHQYDVR0OBBYEFFFc5uyCyglQoZiKhzXzMcQ3BKORMB8GA1UdIwQYMBaAFFFc5uyCyglQoZiKhzXzMcQ3BKORMA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIhANbA9CuhoOifZMMmqkpuld+65CR+ItKdXeRAhLMZuccuAiB0FSQB34zMutXrZj1g8Gl5OkE7YryFHbei1z0SveHR8g== " +
 | 
			
		||||
        "-----END CERTIFICATE-----\"";
 | 
			
		||||
 | 
			
		||||
    protected static final String certificateId =  "\"84f5911765abba1f96bf4165604e9e90338fc6214081a8e623b6ff9669aedb27\"";
 | 
			
		||||
 | 
			
		||||
    protected static final String DEVICE_WITH_DEVICE_CREDENTIALS_X509_CERTIFICATE_PARAM_DESCRIPTION =
 | 
			
		||||
            "{\n" +
 | 
			
		||||
                    "  \"device\": {\n" +
 | 
			
		||||
                    "    \"name\":\"Name_DeviceWithCredantial_X509_Certificate\",\n" +
 | 
			
		||||
                    "    \"label\":\"Label_DeviceWithCredantial_X509_Certificate\",\n" +
 | 
			
		||||
                    "    \"deviceProfileId\":{\n" +
 | 
			
		||||
                    "      \"id\":\"9d9588c0-06c9-11ee-b618-19be30fdeb60\",\n" +
 | 
			
		||||
                    "      \"entityType\":\"DEVICE_PROFILE\"\n" +
 | 
			
		||||
                    "     }\n" +
 | 
			
		||||
                    "   },\n" +
 | 
			
		||||
                    "  \"credentials\": {\n" +
 | 
			
		||||
                    "    \"credentialsType\": \"X509_CERTIFICATE\",\n" +
 | 
			
		||||
                    "    \"credentialsId\": " + certificateId + ",\n" +
 | 
			
		||||
                    "    \"credentialsValue\": " + certificateValue + "\n" +
 | 
			
		||||
                    "   }\n" +
 | 
			
		||||
                    "}";
 | 
			
		||||
 | 
			
		||||
    protected static final String MQTT_BASIC_VALUE = "\"{\\\"clientId\\\":\\\"5euh5nzm34bjjh1efmlt\\\",\\\"userName\\\":\\\"onasd1lgwasmjl7v2v7h\\\",\\\"password\\\":\\\"b9xtm4ny8kt9zewaga5o\\\"}\"";
 | 
			
		||||
 | 
			
		||||
    protected static final String DEVICE_WITH_DEVICE_CREDENTIALS_MQTT_BASIC_PARAM_DESCRIPTION =
 | 
			
		||||
            "{\n" +
 | 
			
		||||
                    "  \"device\": {\n" +
 | 
			
		||||
                    "    \"name\":\"Name_DeviceWithCredantial_MQTT_Basic\",\n" +
 | 
			
		||||
                    "    \"label\":\"Label_DeviceWithCredantial_MQTT_Basic\",\n" +
 | 
			
		||||
                    "    \"deviceProfileId\":{\n" +
 | 
			
		||||
                    "      \"id\":\"9d9588c0-06c9-11ee-b618-19be30fdeb60\",\n" +
 | 
			
		||||
                    "      \"entityType\":\"DEVICE_PROFILE\"\n" +
 | 
			
		||||
                    "     }\n" +
 | 
			
		||||
                    "   },\n" +
 | 
			
		||||
                    "  \"credentials\": {\n" +
 | 
			
		||||
                    "    \"credentialsType\": \"MQTT_BASIC\",\n" +
 | 
			
		||||
                    "    \"credentialsValue\": " + MQTT_BASIC_VALUE + "\n" +
 | 
			
		||||
                    "   }\n" +
 | 
			
		||||
                    "}";
 | 
			
		||||
 | 
			
		||||
    protected static final String CREDENTIALS_VALUE_LVM2M_RPK_DESCRIPTION =
 | 
			
		||||
       "       \"{" +
 | 
			
		||||
                   "\\\"client\\\":{ " +
 | 
			
		||||
                       "\\\"endpoint\\\":\\\"LwRpk00000000\\\", " +
 | 
			
		||||
@ -279,6 +341,12 @@ public class ControllerConstants {
 | 
			
		||||
   protected static final String DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_ACCESS_TOKEN_DEFAULT_DESCRIPTION_MARKDOWN =
 | 
			
		||||
            MARKDOWN_CODE_BLOCK_START + DEVICE_WITH_DEVICE_CREDENTIALS_ACCESS_TOKEN_DEFAULT_PARAM_DESCRIPTION + MARKDOWN_CODE_BLOCK_END;
 | 
			
		||||
 | 
			
		||||
  protected static final String DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_X509_CERTIFICATE_DESCRIPTION_MARKDOWN =
 | 
			
		||||
            MARKDOWN_CODE_BLOCK_START + DEVICE_WITH_DEVICE_CREDENTIALS_X509_CERTIFICATE_PARAM_DESCRIPTION + MARKDOWN_CODE_BLOCK_END;
 | 
			
		||||
 | 
			
		||||
  protected static final String DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_MQTT_BASIC_DESCRIPTION_MARKDOWN =
 | 
			
		||||
            MARKDOWN_CODE_BLOCK_START + DEVICE_WITH_DEVICE_CREDENTIALS_MQTT_BASIC_PARAM_DESCRIPTION + MARKDOWN_CODE_BLOCK_END;
 | 
			
		||||
 | 
			
		||||
   protected static final String DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_LVM2M_RPK_DESCRIPTION_MARKDOWN =
 | 
			
		||||
            MARKDOWN_CODE_BLOCK_START + DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_LVM2M_RPK_DESCRIPTION + MARKDOWN_CODE_BLOCK_END;
 | 
			
		||||
 | 
			
		||||
@ -1594,4 +1662,15 @@ public class ControllerConstants {
 | 
			
		||||
            MARKDOWN_CODE_BLOCK_START +
 | 
			
		||||
            "[{\"ts\":1634712287000,\"values\":{\"temperature\":26, \"humidity\":87}}, {\"ts\":1634712588000,\"values\":{\"temperature\":25, \"humidity\":88}}]" +
 | 
			
		||||
            MARKDOWN_CODE_BLOCK_END ;
 | 
			
		||||
 | 
			
		||||
    private static String[] fetchLeafCertificateFromChain(String value) {
 | 
			
		||||
        List<String> chain = new ArrayList<>();
 | 
			
		||||
        String regex = "-----BEGIN CERTIFICATE-----\\s*.*?\\s*-----END CERTIFICATE-----";
 | 
			
		||||
        Pattern pattern = Pattern.compile(regex);
 | 
			
		||||
        Matcher matcher = pattern.matcher(value);
 | 
			
		||||
        while (matcher.find()) {
 | 
			
		||||
            chain.add(matcher.group(0));
 | 
			
		||||
        }
 | 
			
		||||
        return chain.toArray(new String[0]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -96,6 +96,8 @@ import static org.thingsboard.server.controller.ControllerConstants.DEVICE_TYPE_
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_ACCESS_TOKEN_DEFAULT_DESCRIPTION_MARKDOWN;
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_ACCESS_TOKEN_DESCRIPTION_MARKDOWN;
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_LVM2M_RPK_DESCRIPTION_MARKDOWN;
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_MQTT_BASIC_DESCRIPTION_MARKDOWN;
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_X509_CERTIFICATE_DESCRIPTION_MARKDOWN;
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.EDGE_ASSIGN_ASYNC_FIRST_STEP_DESCRIPTION;
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.EDGE_ASSIGN_RECEIVE_STEP_DESCRIPTION;
 | 
			
		||||
import static org.thingsboard.server.controller.ControllerConstants.EDGE_ID_PARAM_DESCRIPTION;
 | 
			
		||||
@ -185,13 +187,18 @@ public class DeviceController extends BaseController {
 | 
			
		||||
    @ApiOperation(value = "Create Device (saveDevice) with credentials ",
 | 
			
		||||
            notes = "Create or update the Device. When creating device, platform generates Device Id as " + UUID_WIKI_LINK +
 | 
			
		||||
                    "Requires to provide the Device Credentials object as well as an existing device profile ID or use \"default\".\n" +
 | 
			
		||||
                    "Note: LwM2M device - only existing device profile ID (Transport configuration -> Transport type: \"LWM2M\".\n\n" +
 | 
			
		||||
                    "You may find the example of device with different type of credentials below: \n\n" +
 | 
			
		||||
                    "- Credentials type: <b>\"Access token\"</b> with Device profile ID below: \n\n" +
 | 
			
		||||
                    "- Credentials type: <b>\"Access token\"</b> with <b>device profile ID</b> below: \n\n" +
 | 
			
		||||
                    DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_ACCESS_TOKEN_DESCRIPTION_MARKDOWN  + "\n\n" +
 | 
			
		||||
                    "- Credentials type: <b>\"Access token\"</b> with Device profile <b>default</b> below: \n\n" +
 | 
			
		||||
                    "- Credentials type: <b>\"Access token\"</b> with  <b>device profile default</b> below: \n\n" +
 | 
			
		||||
                    DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_ACCESS_TOKEN_DEFAULT_DESCRIPTION_MARKDOWN  + "\n\n" +
 | 
			
		||||
                    "- Credentials type: <b>\"X509\"</b> with <b>device profile ID</b> below: \n\n" +
 | 
			
		||||
                    "Note: <b>credentialsId</b> -  format <b>Sha3Hash</b>, <b>certificateValue</b> - format <b>PEM</b> (with \"--BEGIN CERTIFICATE----\" and  -\"----END CERTIFICATE-\").\n\n" +
 | 
			
		||||
                    DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_X509_CERTIFICATE_DESCRIPTION_MARKDOWN  + "\n\n" +
 | 
			
		||||
                    "- Credentials type: <b>\"MQTT_BASIC\"</b> with <b>device profile ID</b> below: \n\n" +
 | 
			
		||||
                    DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_MQTT_BASIC_DESCRIPTION_MARKDOWN  + "\n\n" +
 | 
			
		||||
                    "- You may find the example of <b>LwM2M</b> device and <b>RPK</b> credentials below: \n\n" +
 | 
			
		||||
                    "Note: LwM2M device - only existing device profile ID (Transport configuration -> Transport type: \"LWM2M\".\n\n" +
 | 
			
		||||
                    DEVICE_WITH_DEVICE_CREDENTIALS_PARAM_LVM2M_RPK_DESCRIPTION_MARKDOWN + "\n\n" +
 | 
			
		||||
                    "Remove 'id', 'tenantId' and optionally 'customerId' from the request body example (below) to create new Device entity. " +
 | 
			
		||||
                    TENANT_OR_CUSTOMER_AUTHORITY_PARAGRAPH)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user