public static Metadata sign()

in java/client/src/main/java/org/apache/rocketmq/client/java/rpc/Signature.java [56:117]


    public static Metadata sign(ClientConfiguration config, ClientId clientId) throws
        NoSuchAlgorithmException, InvalidKeyException {
        Metadata metadata = new Metadata();

        metadata.put(Metadata.Key.of(LANGUAGE_KEY, Metadata.ASCII_STRING_MARSHALLER), "JAVA");
        metadata.put(Metadata.Key.of(PROTOCOL_VERSION, Metadata.ASCII_STRING_MARSHALLER),
            Utilities.getProtocolVersion());
        metadata.put(Metadata.Key.of(CLIENT_VERSION_KEY, Metadata.ASCII_STRING_MARSHALLER), MetadataUtils.getVersion());

        String dateTime = new SimpleDateFormat(DATE_TIME_FORMAT).format(new Date());
        metadata.put(Metadata.Key.of(DATE_TIME_KEY, Metadata.ASCII_STRING_MARSHALLER), dateTime);

        final String requestId = RequestIdGenerator.getInstance().next();
        metadata.put(Metadata.Key.of(REQUEST_ID_KEY, Metadata.ASCII_STRING_MARSHALLER), requestId);

        metadata.put(Metadata.Key.of(CLIENT_ID_KEY, Metadata.ASCII_STRING_MARSHALLER), clientId.toString());

        final Optional<SessionCredentialsProvider> optionalSessionCredentialsProvider =
            config.getCredentialsProvider();
        if (!optionalSessionCredentialsProvider.isPresent()) {
            return metadata;
        }
        final SessionCredentialsProvider provider = optionalSessionCredentialsProvider.get();
        final SessionCredentials credentials = provider.getSessionCredentials();
        if (null == credentials) {
            return metadata;
        }

        final Optional<String> optionalSecurityToken = credentials.tryGetSecurityToken();
        optionalSecurityToken.ifPresent(s -> metadata.put(Metadata.Key.of(SESSION_TOKEN_KEY,
            Metadata.ASCII_STRING_MARSHALLER), s));

        final String accessKey = credentials.getAccessKey();
        final String accessSecret = credentials.getAccessSecret();

        if (StringUtils.isBlank(accessKey)) {
            return metadata;
        }

        if (StringUtils.isBlank(accessSecret)) {
            return metadata;
        }

        String sign = TLSHelper.sign(accessSecret, dateTime);

        final String authorization = ALGORITHM
            + " "
            + CREDENTIAL
            + "="
            + accessKey
            + ", "
            + SIGNED_HEADERS
            + "="
            + DATE_TIME_KEY
            + ", "
            + SIGNATURE
            + "="
            + sign;

        metadata.put(Metadata.Key.of(AUTHORIZATION_KEY, Metadata.ASCII_STRING_MARSHALLER), authorization);
        return metadata;
    }