All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.onfido.api.client.UploadDocumentAPI Maven / Gradle / Ivy

package com.onfido.api.client;

import com.onfido.api.client.data.DocType;
import com.onfido.api.client.data.DocumentMediaIntegrity;
import com.onfido.api.client.data.DocumentMediaUploadResponse;
import com.onfido.api.client.data.DocumentUpload;
import com.onfido.api.client.data.InternalDocSide;
import com.onfido.api.client.data.PoaDocumentType;
import com.onfido.api.client.data.PoaDocumentUpload;
import com.onfido.api.client.data.SdkUploadMetaData;
import com.onfido.api.client.token.InternalToken;
import com.onfido.api.client.token.TokenProvider;
import com.onfido.api.client.token.sdk.InternalSDKToken;
import com.onfido.api.client.util.HashUtil;

import org.jetbrains.annotations.Nullable;

import java.util.Map;

import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.core.Single;
import okhttp3.RequestBody;
import retrofit2.Call;

class UploadDocumentAPI {

    private final TokenProvider tokenProvider;
    private final OnfidoService onfidoService;

    UploadDocumentAPI(
            TokenProvider tokenProvider,
            OnfidoService onfidoService
    ) {
        this.tokenProvider = tokenProvider;
        this.onfidoService = onfidoService;
    }

    // API V3 specific
    Call upload(
            String fileName,
            DocType documentType,
            String fileType,
            byte[] data,
            Map validations,
            InternalDocSide side,
            String issuingCountry,
            SdkUploadMetaData sdkUploadMetaData,
            String sdkSource,
            String sdkVersion
    ) {
        MultipartDocumentRequestBuilder builder = new MultipartDocumentRequestBuilder(sdkSource, sdkVersion);
        RequestBody body = builder.setMultipartRequestBody(
                fileName,
                documentType,
                fileType,
                data,
                validations,
                side,
                issuingCountry,
                sdkUploadMetaData,
                null
        ).build();

        return onfidoService.upload(body);
    }

    Single uploadSingle(
            String fileName,
            DocType documentType,
            String fileType,
            byte[] data,
            String mediaType,
            SdkUploadMetaData sdkUploadMetaData,
            String sdkSource,
            String sdkVersion
    ) {
        MultipartDocumentRequestBuilder builder = new MultipartDocumentRequestBuilder(sdkSource, sdkVersion);
        RequestBody body = builder.setMultipartRequestBody(
                fileName,
                documentType,
                fileType,
                data,
                null,
                null,
                null,
                sdkUploadMetaData,
                mediaType
        ).build();

        return onfidoService.uploadSingle(body);
    }

    Single poaUpload(
            String fileName,
            PoaDocumentType poaDocumentType,
            String fileType,
            byte[] data,
            String issuingCountry,
            SdkUploadMetaData sdkUploadMetaData,
            String sdkSource,
            String sdkVersion
    ) {
        MultipartDocumentRequestBuilder builder = new MultipartDocumentRequestBuilder(sdkSource, sdkVersion);

        RequestBody body = builder.setPoaMultipartRequestBody(
                fileName,
                poaDocumentType,
                fileType,
                data,
                issuingCountry,
                sdkUploadMetaData
        ).build();

        return onfidoService.uploadPoa(body);
    }

    Single uploadVideo(
            String documentId,
            String videoPath,
            SdkUploadMetaData sdkUploadMetaData,
            String sdkSource,
            String sdkVersion,
            DocumentMediaIntegrity documentMediaIntegrity,
            InternalDocSide docSide,
            DocType docType,
            @Nullable String issuingCountry
    ) {
        String mediaSignature = null;
        String clientNonce = null;
        MultipartDocumentRequestBuilder builder = new MultipartDocumentRequestBuilder(sdkSource, sdkVersion);
        RequestBody body = builder.setMultipartRequestBody(
                documentId,
                videoPath,
                sdkUploadMetaData,
                docSide,
                docType,
                issuingCountry
        ).build();

        if (documentMediaIntegrity != null) {
            mediaSignature = documentMediaIntegrity.getSignatureBase64();
            clientNonce = documentMediaIntegrity.getClientNonce();
        }

        return onfidoService.uploadDocumentVideo(mediaSignature, clientNonce, body)
                .map(DocumentUpload::getId);
    }

    public Single uploadDocumentMedia(
            String fileName,
            String fileType,
            String mediaType,
            @Nullable String docSide,
            @Nullable String docType,
            Map validations,
            byte[] data,
            SdkUploadMetaData sdkUploadMetaData,
            String sdkSource,
            String sdkVersion
    ) {
        String hashedFile = HashUtil.sha256(data, getUuid());
        DocumentMediaRequestBuilder builder = new DocumentMediaRequestBuilder(sdkSource, sdkVersion);
        RequestBody requestBody = builder.setMultipartRequestBody(
                fileName,
                fileType,
                data,
                mediaType,
                docSide,
                docType,
                validations,
                sdkUploadMetaData
        ).build();
        return onfidoService.uploadMediaFile(hashedFile, requestBody);
    }

    private String getUuid() {
        InternalToken token = tokenProvider.provideToken();
        return (token instanceof InternalSDKToken) ? ((InternalSDKToken) token).getUuid() : "";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy