⚠️ Warning: This is a draft ⚠️

This means it might contain formatting issues, incorrect code, conceptual problems, or other severe issues.

If you want to help to improve and eventually enable this page, please fork RosettaGit's repository and open a merge request on GitHub.

{{omit from|Apex}}

Apex


public class amazon{

    public amazon(){}
       
    public void sendTXTToAmazon(Blob b,String docname,String bucket){
        Datetime currentDate = DateTimeHelper.getGMTDate(Datetime.now());      
        
        /* Send to Amazon S3 */
        HttpRequest req = new HttpRequest();         
        AWSAccess__c CS = AWSAccess__c.getOrgDefaults();         
        string amz_content_sha256 = EncodingUtil.convertToHex(Crypto.generateDigest('SHA-256', b));        
        /*Set HTTPRequest Method*/
        req.setMethod('PUT');               
        /*Set HTTPRequest header properties*/
        req.setHeader('content-type', 'text/plain;charset=utf-8');
        req.setHeader('Content-Length',String.valueOf(b.size()));
        req.setHeader('Host','s3-eu-central-1.amazonaws.com');
        req.setHeader('Connection','keep-alive');
        req.setEndpoint('https://s3-eu-central-1.amazonaws.com/'+bucket+'/'+docname);
        req.setHeader('x-amz-content-sha256',amz_content_sha256); 
        req.setHeader('x-amz-storage-class','REDUCED_REDUNDANCY');         
        String todayformat =  currentDate.format('yyyyMMdd');
        req.setHeader('Date',currentDate.format('EEE, d MMM yyyy HH:mm:ss Z')); 
        req.setHeader('x-amz-date',currentDate.format('yyyyMMdd')+'T'+currentDate.format('HHmmss')+'Z'); 
        String key = 'AWS4' +CS.secret__c;
        
        Blob DateKey                 = Crypto.generateMac('hmacSHA256',Blob.valueOf(todayformat),Blob.valueOf(key));
        Blob DateRegionKey           = Crypto.generateMac('hmacSHA256',Blob.valueOf('eu-central-1'),DateKey);
        Blob DateRegionServiceKey    = Crypto.generateMac('hmacSHA256',Blob.valueOf('s3'),DateRegionKey);
        Blob SigningKey              = Crypto.generateMac('hmacSHA256',Blob.valueOf('aws4_request'),DateRegionServiceKey);
        
        String canonical =  'PUT\n'+
                            '/'+bucket+'/'+docname+'\n\n'+                
                            'date:' + currentDate.format('EEE, d MMM yyyy HH:mm:ss Z')+'\n'+
                            'host:s3-eu-central-1.amazonaws.com\n'+
                            'x-amz-content-sha256:'+amz_content_sha256+'\n'+
                            'x-amz-date:'+currentDate.format('yyyyMMdd')+'T'+currentDate.format('HHmmss')+'Z'+'\n'+
                            'x-amz-storage-class:REDUCED_REDUNDANCY\n\n'+                
                            'date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class\n'
                            +amz_content_sha256;   
        
              
        Blob canonicalsign = Crypto.generateDigest('SHA-256', Blob.valueOf(canonical));  
        Blob StringToSign = Blob.valueOf('AWS4-HMAC-SHA256\n'+
        currentDate.format('yyyyMMdd')+'T'+currentDate.format('HHmmss')+'Z'+'\n'+
        currentDate.format('yyyyMMdd')+'/eu-central-1/s3/aws4_request\n'+
        EncodingUtil.convertToHex(canonicalsign));        
        Blob bsig =  Crypto.generateMac('hmacSHA256',StringToSign,SigningKey);        
        req.setHeader('Authorization', 'AWS4-HMAC-SHA256 Credential='+CS.Key__c+'/'+todayformat+'/eu-central-1/s3/aws4_request,SignedHeaders=date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature='+EncodingUtil.convertToHex(bsig));        
        String docBody = EncodingUtil.convertToHex(b);
        
        /*Set the HTTPRequest body */   
        req.setBodyAsBlob(b);   
        Http http = new Http();        
        try {   
            HTTPResponse res = http.send(req);                      
            System.debug(res.getBody());                   
            //System.debug(res.toString());
            System.debug('STATUS:'+res.getStatus());
            
            System.debug('STATUS_CODE:'+res.getStatusCode());                        
        } catch(System.CalloutException e) {           
            System.debug('erreur : '+e);
        }             
        
    }
    public void sendPDFToAmazon(Blob b,String docname,String bucket){
        Datetime currentDate = DateTimeHelper.getGMTDate(Datetime.now());      
        
        /* Send to Amazon S3 */
        HttpRequest req = new HttpRequest();         
        AWSAccess__c CS = AWSAccess__c.getOrgDefaults();         
        string amz_content_sha256 = EncodingUtil.convertToHex(Crypto.generateDigest('SHA-256', b));        
        /*Set HTTPRequest Method*/
        req.setMethod('PUT');               
        /*Set HTTPRequest header properties*/
        req.setHeader('content-type', 'application/pdf');
        req.setHeader('Content-Length',String.valueOf(b.size()));
        req.setHeader('Host','s3-eu-central-1.amazonaws.com');
        req.setHeader('Connection','keep-alive');
        req.setEndpoint('https://s3-eu-central-1.amazonaws.com/'+bucket+'/'+docname);
        req.setHeader('x-amz-content-sha256',amz_content_sha256); 
        req.setHeader('x-amz-storage-class','REDUCED_REDUNDANCY');         
        String todayformat =  currentDate.format('yyyyMMdd');
        req.setHeader('Date',currentDate.format('EEE, d MMM yyyy HH:mm:ss Z')); 
        req.setHeader('x-amz-date',currentDate.format('yyyyMMdd')+'T'+currentDate.format('HHmmss')+'Z'); 
        String key = 'AWS4' +CS.secret__c;
        
        Blob DateKey                 = Crypto.generateMac('hmacSHA256',Blob.valueOf(todayformat),Blob.valueOf(key));
        Blob DateRegionKey           = Crypto.generateMac('hmacSHA256',Blob.valueOf('eu-central-1'),DateKey);
        Blob DateRegionServiceKey    = Crypto.generateMac('hmacSHA256',Blob.valueOf('s3'),DateRegionKey);
        Blob SigningKey              = Crypto.generateMac('hmacSHA256',Blob.valueOf('aws4_request'),DateRegionServiceKey);
        
        String canonical =  'PUT\n'+
                            '/'+bucket+'/'+docname+'\n\n'+                
                            'date:' + currentDate.format('EEE, d MMM yyyy HH:mm:ss Z')+'\n'+
                            'host:s3-eu-central-1.amazonaws.com\n'+
                            'x-amz-content-sha256:'+amz_content_sha256+'\n'+
                            'x-amz-date:'+currentDate.format('yyyyMMdd')+'T'+currentDate.format('HHmmss')+'Z'+'\n'+
                            'x-amz-storage-class:REDUCED_REDUNDANCY\n\n'+                
                            'date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class\n'
                            +amz_content_sha256;              
        Blob canonicalsign = Crypto.generateDigest('SHA-256', Blob.valueOf(canonical));  
        Blob StringToSign = Blob.valueOf('AWS4-HMAC-SHA256\n'+
        currentDate.format('yyyyMMdd')+'T'+currentDate.format('HHmmss')+'Z'+'\n'+
        currentDate.format('yyyyMMdd')+'/eu-central-1/s3/aws4_request\n'+
        EncodingUtil.convertToHex(canonicalsign));        
        Blob bsig =  Crypto.generateMac('hmacSHA256',StringToSign,SigningKey);        
        req.setHeader('Authorization', 'AWS4-HMAC-SHA256 Credential='+CS.Key__c+'/'+todayformat+'/eu-central-1/s3/aws4_request,SignedHeaders=date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature='+EncodingUtil.convertToHex(bsig));        
        String docBody = EncodingUtil.convertToHex(b);
        
        /*Set the HTTPRequest body */   
        req.setBodyAsBlob(b);   
        Http http = new Http();        
        try {   
            HTTPResponse res = http.send(req);                      
            System.debug(res.getBody());                   
            //System.debug(res.toString());
            System.debug('STATUS:'+res.getStatus());
            
            System.debug('STATUS_CODE:'+res.getStatusCode());                    
        } catch(System.CalloutException e) {           
            System.debug('erreur : '+e);
            MailingHelper.sendToAdminMail('Erreur SEND PDF Amazon : '+docname, e.getMessage());            
        }             
        
    }    
    public string GetObjectUrl(String docname,String bucket){
        String url;
        Datetime currentDate = DateTimeHelper.getGMTDate(Datetime.now());
        string exipredFormat = '1600';
        
        String todayformat =  currentDate.format('yyyyMMdd');       
        AWSAccess__c CS = AWSAccess__c.getOrgDefaults();  
        
        String key = 'AWS4' +CS.secret__c;        
        Blob DateKey                 = Crypto.generateMac('hmacSHA256',Blob.valueOf(todayformat),Blob.valueOf(key));
        Blob DateRegionKey           = Crypto.generateMac('hmacSHA256',Blob.valueOf('eu-central-1'),DateKey);
        Blob DateRegionServiceKey    = Crypto.generateMac('hmacSHA256',Blob.valueOf('s3'),DateRegionKey);
        Blob SigningKey              = Crypto.generateMac('hmacSHA256',Blob.valueOf('aws4_request'),DateRegionServiceKey);
        
        String canonical =  'GET\n'+
                            '/'+docname+'\n'+  
                            'X-Amz-Algorithm=AWS4-HMAC-SHA256&'+
                            'X-Amz-Credential='+CS.Key__c+'%2F'+todayformat+'%2Feu-central-1%2Fs3%2Faws4_request&'+
                            'X-Amz-Date='+todayformat+'T'+currentDate.format('HHmmss')+'Z&'+
                            'X-Amz-Expires='+exipredFormat+'&X-Amz-SignedHeaders=host\n'+
                            'host:'+bucket+'.s3.amazonaws.com\n\n'+ 
                            'host\n'+
                            'UNSIGNED-PAYLOAD';  
        system.debug(canonical);
        Blob canonicalsign = Crypto.generateDigest('SHA-256', Blob.valueOf(canonical)); 
       
        Blob StringToSign = Blob.valueOf('AWS4-HMAC-SHA256\n'+
                            todayformat+'T'+currentDate.format('HHmmss')+'Z'+'\n'+
                            todayformat+'/eu-central-1/s3/aws4_request\n'+
                            EncodingUtil.convertToHex(canonicalsign)); 
        
        system.debug(StringToSign);
   
        
        Blob bsig =  Crypto.generateMac('hmacSHA256',StringToSign,SigningKey);         
        
        url = 'https://'+bucket+'.s3.amazonaws.com/'+docname+'?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential='+CS.Key__c+'/'+todayformat+'/eu-central-1/s3/aws4_request&X-Amz-Date='+todayformat+'T'+currentDate.format('HHmmss')+'Z&X-Amz-Expires='+exipredFormat+'&X-Amz-SignedHeaders=host&X-Amz-Signature='+EncodingUtil.convertToHex(bsig);
              
        return url;
    }
}