PermissionProviderStandard.java 11.6 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.internal.util.BitwiseExpression
 *  com.adobe.internal.util.BitwiseOperandEvaluator
 *  com.adobe.internal.util.InvalidOperandException
 *  com.adobe.internal.util.MalformedExpressionException
 */
package com.adobe.internal.pdftoolkit.core.permissionprovider;

import com.adobe.internal.pdftoolkit.core.exceptions.PDFUnableToCompleteOperationException;
import com.adobe.internal.pdftoolkit.core.permissionprovider.ObjectOperations;
import com.adobe.internal.pdftoolkit.core.permissionprovider.PermissionProvider;
import com.adobe.internal.util.BitwiseExpression;
import com.adobe.internal.util.BitwiseOperandEvaluator;
import com.adobe.internal.util.InvalidOperandException;
import com.adobe.internal.util.MalformedExpressionException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class PermissionProviderStandard
implements PermissionProvider,
BitwiseOperandEvaluator {
    private int m_Perms = 0;
    static final String OPEN = "Open";
    static final String SECURE = "Secure";
    static final String PRINT_LOW = "PrintLow";
    static final String EDIT = "Modfiy/Edit";
    static final String COPY = "Copy";
    static final String EDIT_NOTES = "EditNotes";
    static final String EXT = "Ext";
    static final String SAVE_AS = "SaveAs";
    static final String FILL_SIGNIN = "FillAndSign";
    static final String ACCESSIBLE = "Accessible";
    static final String DOC_ASSEMBLY = "DocAssembly";
    static final String HIGH_PRINT = "HighPrint";
    private static final Map m_PermissionData = PermissionProviderStandard.initPermissionData();
    private static final Map m_ReversePermissionData = PermissionProviderStandard.initReversePermissionData();
    private static final Map m_BitFlags = PermissionProviderStandard.initBitFlags();

    public PermissionProviderStandard(int perms) {
        this.m_Perms = perms;
    }

    public static PermissionProviderStandard newInstance(PermissionProvider provider) throws PDFUnableToCompleteOperationException {
        if (provider == null) {
            return null;
        }
        if (provider instanceof PermissionProviderStandard) {
            return new PermissionProviderStandard(((PermissionProviderStandard)provider).getPermissionBits());
        }
        int perms = 0;
        for (ObjectOperations operation : m_ReversePermissionData.keySet()) {
            if (!provider.isPermitted(operation)) continue;
            String permission = (String)m_ReversePermissionData.get(operation);
            Integer bitFlag = (Integer)m_BitFlags.get(permission);
            perms |= 1 << bitFlag;
        }
        return new PermissionProviderStandard(perms);
    }

    public int getPermissionBits() {
        return this.m_Perms;
    }

    private static Map initPermissionData() {
        HashMap<ObjectOperations, String> permissionData = new HashMap<ObjectOperations, String>();
        permissionData.put(ObjectOperations.DOC_MODIFY, "Modfiy/Edit");
        permissionData.put(ObjectOperations.DOC_COPY, "Copy");
        permissionData.put(ObjectOperations.DOC_ACCESSIBLE, "Copy|Accessible");
        permissionData.put(ObjectOperations.DOC_OPEN, "Open");
        permissionData.put(ObjectOperations.DOC_SECURE, "Secure");
        permissionData.put(ObjectOperations.DOC_PRINT_HIGH, "HighPrint");
        permissionData.put(ObjectOperations.DOC_PRINT_LOW, "PrintLow");
        permissionData.put(ObjectOperations.DOC_FULLSAVE, "Modfiy/Edit|EditNotes|FillAndSign|DocAssembly");
        permissionData.put(ObjectOperations.DOC_IMPORT, "Modfiy/Edit");
        permissionData.put(ObjectOperations.DOC_EXPORT, "Copy");
        permissionData.put(ObjectOperations.PAGE_CREATE, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_DELETE, "Modfiy/Edit|DocAssembly");
        permissionData.put(ObjectOperations.PAGE_MODIFY, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_COPY, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_ROTATE, "Modfiy/Edit|DocAssembly");
        permissionData.put(ObjectOperations.PAGE_CROP, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_INSERT, "Modfiy/Edit|DocAssembly");
        permissionData.put(ObjectOperations.PAGE_REPLACE, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_REORDER, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_EXPORT, "Secure");
        permissionData.put(ObjectOperations.LINK_CREATE, "Modfiy/Edit");
        permissionData.put(ObjectOperations.LINK_DELETE, "Modfiy/Edit");
        permissionData.put(ObjectOperations.LINK_MODIFY, "Modfiy/Edit");
        permissionData.put(ObjectOperations.LINK_IMPORT, "Modfiy/Edit");
        permissionData.put(ObjectOperations.LINK_EXPORT, "Modfiy/Edit|Copy");
        permissionData.put(ObjectOperations.BOOKMARK_CREATE, "Modfiy/Edit|DocAssembly");
        permissionData.put(ObjectOperations.BOOKMARK_DELETE, "Modfiy/Edit|DocAssembly");
        permissionData.put(ObjectOperations.BOOKMARK_MODIFY, "Modfiy/Edit|DocAssembly");
        permissionData.put(ObjectOperations.BOOKMARK_EXPORT, "Modfiy/Edit|DocAssembly");
        permissionData.put(ObjectOperations.THUMBNAIL_CREATE, "Modfiy/Edit|DocAssembly");
        permissionData.put(ObjectOperations.THUMBNAIL_DELETE, "Modfiy/Edit|DocAssembly");
        permissionData.put(ObjectOperations.THUMBNAIL_EXPORT, "Modfiy/Edit|DocAssembly");
        permissionData.put(ObjectOperations.ANNOT_CREATE, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_DELETE, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_MODIFY, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_COPY, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_SUMMARIZE, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_IMPORT, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_EXPORT, "Copy|EditNotes");
        permissionData.put(ObjectOperations.FORM_CREATE, "Modfiy/Edit&EditNotes");
        permissionData.put(ObjectOperations.FORM_DELETE, "Modfiy/Edit&EditNotes");
        permissionData.put(ObjectOperations.FORM_MODIFY, "Modfiy/Edit&EditNotes");
        permissionData.put(ObjectOperations.FORM_FILLIN, "Modfiy/Edit|EditNotes|FillAndSign");
        permissionData.put(ObjectOperations.FORM_IMPORT, "Modfiy/Edit|EditNotes|FillAndSign");
        permissionData.put(ObjectOperations.FORM_EXPORT, "Copy| (Modfiy/Edit&EditNotes)");
        permissionData.put(ObjectOperations.FORM_SPAWN_TEMPLATE, "Modfiy/Edit|FillAndSign");
        permissionData.put(ObjectOperations.SIGNATURE_CREATE, "Modfiy/Edit&EditNotes");
        permissionData.put(ObjectOperations.SIGNATURE_DELETE, "Modfiy/Edit&EditNotes");
        permissionData.put(ObjectOperations.SIGNATURE_MODIFY, "Modfiy/Edit&EditNotes");
        permissionData.put(ObjectOperations.SIGNATURE_FILLIN, "Modfiy/Edit|EditNotes|FillAndSign");
        permissionData.put(ObjectOperations.EF_CREATE, "Modfiy/Edit|EditNotes");
        permissionData.put(ObjectOperations.EF_DELETE, "Modfiy/Edit|EditNotes");
        permissionData.put(ObjectOperations.EF_MODIFY, "Modfiy/Edit|EditNotes|FillAndSign");
        permissionData.put(ObjectOperations.EF_IMPORT, "Modfiy/Edit|EditNotes");
        permissionData.put(ObjectOperations.EF_EXPORT, "Copy");
        return permissionData;
    }

    private static Map initReversePermissionData() {
        HashMap<ObjectOperations, String> permissionData = new HashMap<ObjectOperations, String>();
        permissionData.put(ObjectOperations.DOC_MODIFY, "Modfiy/Edit");
        permissionData.put(ObjectOperations.DOC_COPY, "Copy");
        permissionData.put(ObjectOperations.DOC_PRINT_HIGH, "HighPrint");
        permissionData.put(ObjectOperations.DOC_PRINT_LOW, "PrintLow");
        permissionData.put(ObjectOperations.DOC_IMPORT, "Modfiy/Edit");
        permissionData.put(ObjectOperations.DOC_EXPORT, "Copy");
        permissionData.put(ObjectOperations.DOC_ACCESSIBLE, "Accessible");
        permissionData.put(ObjectOperations.PAGE_CREATE, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_MODIFY, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_COPY, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_CROP, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_REPLACE, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_REORDER, "Modfiy/Edit");
        permissionData.put(ObjectOperations.PAGE_DELETE, "DocAssembly");
        permissionData.put(ObjectOperations.PAGE_ROTATE, "DocAssembly");
        permissionData.put(ObjectOperations.PAGE_INSERT, "DocAssembly");
        permissionData.put(ObjectOperations.LINK_CREATE, "Modfiy/Edit");
        permissionData.put(ObjectOperations.LINK_DELETE, "Modfiy/Edit");
        permissionData.put(ObjectOperations.LINK_MODIFY, "Modfiy/Edit");
        permissionData.put(ObjectOperations.LINK_IMPORT, "Modfiy/Edit");
        permissionData.put(ObjectOperations.ANNOT_CREATE, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_DELETE, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_MODIFY, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_COPY, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_SUMMARIZE, "EditNotes");
        permissionData.put(ObjectOperations.ANNOT_IMPORT, "EditNotes");
        permissionData.put(ObjectOperations.BOOKMARK_CREATE, "DocAssembly");
        permissionData.put(ObjectOperations.BOOKMARK_DELETE, "DocAssembly");
        permissionData.put(ObjectOperations.BOOKMARK_MODIFY, "DocAssembly");
        permissionData.put(ObjectOperations.BOOKMARK_EXPORT, "DocAssembly");
        permissionData.put(ObjectOperations.THUMBNAIL_CREATE, "DocAssembly");
        permissionData.put(ObjectOperations.THUMBNAIL_DELETE, "DocAssembly");
        permissionData.put(ObjectOperations.THUMBNAIL_EXPORT, "DocAssembly");
        permissionData.put(ObjectOperations.FORM_FILLIN, "FillAndSign");
        permissionData.put(ObjectOperations.FORM_IMPORT, "FillAndSign");
        permissionData.put(ObjectOperations.FORM_SPAWN_TEMPLATE, "FillAndSign");
        permissionData.put(ObjectOperations.SIGNATURE_FILLIN, "FillAndSign");
        return permissionData;
    }

    private static Map initBitFlags() {
        HashMap<String, Integer> bitFlags = new HashMap<String, Integer>();
        bitFlags.put("Open", 0);
        bitFlags.put("Secure", 1);
        bitFlags.put("PrintLow", 2);
        bitFlags.put("Modfiy/Edit", 3);
        bitFlags.put("Copy", 4);
        bitFlags.put("EditNotes", 5);
        bitFlags.put("FillAndSign", 8);
        bitFlags.put("Accessible", 9);
        bitFlags.put("DocAssembly", 10);
        bitFlags.put("HighPrint", 11);
        return bitFlags;
    }

    public boolean isPermitted(ObjectOperations objOpr) {
        String permValue = (String)m_PermissionData.get(objOpr);
        if (permValue == null) {
            return true;
        }
        BitwiseExpression expObj = new BitwiseExpression((BitwiseOperandEvaluator)this);
        boolean bRet = true;
        try {
            bRet = expObj.evaluateExpression(permValue);
        }
        catch (MalformedExpressionException e) {
            throw new RuntimeException("Gibson Internal error", (Throwable)e);
        }
        catch (InvalidOperandException e) {
            throw new RuntimeException("Gibson Internal error", (Throwable)e);
        }
        return bRet;
    }

    public boolean evaluate(String operandVar) throws InvalidOperandException {
        Integer bitVal = (Integer)m_BitFlags.get(operandVar);
        if (bitVal == null) {
            throw new InvalidOperandException(operandVar + " is not valid Encryption permission paramter");
        }
        return (this.m_Perms & 1 << bitVal) != 0;
    }
}