| 825 | """ |
| 826 | |
| 827 | def add_auth(self, request): |
| 828 | datetime_now = datetime.datetime.utcnow() |
| 829 | request.context['timestamp'] = datetime_now.strftime(SIGV4_TIMESTAMP) |
| 830 | |
| 831 | fields = {} |
| 832 | if request.context.get('s3-presign-post-fields', None) is not None: |
| 833 | fields = request.context['s3-presign-post-fields'] |
| 834 | |
| 835 | policy = {} |
| 836 | conditions = [] |
| 837 | if request.context.get('s3-presign-post-policy', None) is not None: |
| 838 | policy = request.context['s3-presign-post-policy'] |
| 839 | if policy.get('conditions', None) is not None: |
| 840 | conditions = policy['conditions'] |
| 841 | |
| 842 | policy['conditions'] = conditions |
| 843 | |
| 844 | fields['x-amz-algorithm'] = 'AWS4-HMAC-SHA256' |
| 845 | fields['x-amz-credential'] = self.scope(request) |
| 846 | fields['x-amz-date'] = request.context['timestamp'] |
| 847 | |
| 848 | conditions.append({'x-amz-algorithm': 'AWS4-HMAC-SHA256'}) |
| 849 | conditions.append({'x-amz-credential': self.scope(request)}) |
| 850 | conditions.append({'x-amz-date': request.context['timestamp']}) |
| 851 | |
| 852 | if self.credentials.token is not None: |
| 853 | fields['x-amz-security-token'] = self.credentials.token |
| 854 | conditions.append({'x-amz-security-token': self.credentials.token}) |
| 855 | |
| 856 | # Dump the base64 encoded policy into the fields dictionary. |
| 857 | fields['policy'] = base64.b64encode( |
| 858 | json.dumps(policy).encode('utf-8') |
| 859 | ).decode('utf-8') |
| 860 | |
| 861 | fields['x-amz-signature'] = self.signature(fields['policy'], request) |
| 862 | |
| 863 | request.context['s3-presign-post-fields'] = fields |
| 864 | request.context['s3-presign-post-policy'] = policy |
| 865 | |
| 866 | |
| 867 | class BearerAuth(TokenSigner): |