Package cli_fmw.delegate.collaborator

Source Code of cli_fmw.delegate.collaborator.CollaboratorLocalAbstract

/*
* CollaboratorLocal.java
*
* Created on 17 Декабрь 2007 г., 11:28
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package cli_fmw.delegate.collaborator;

import cli_fmw.Application;
import cli_fmw.delegate.AuditListener;
import cli_fmw.delegate.DEC.DECClientAbstract;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.delegate.cache.DelegateExtraData;
import cli_fmw.delegate.cache.ExtraDataManager;
import cli_fmw.delegate.client.ClientLocalAbstract;
import cli_fmw.login.UserInfoAbstract;
import cli_fmw.main.ClipsException;
import cli_fmw.main.MainWindow;
import cli_fmw.main.UserPanel;
import cli_fmw.utils.MessageBox;
import framework.beans.ModificationInfo;
import framework.beans.collaborator.CollaboratorBeanRemoteAbstract;
import framework.beans.collaborator.CollaboratorDetailsAbstract;
import framework.beans.security.passwords.SessionPassword;
import framework.security.UserRight;
import framework.security.UserRightsGroup;
import framework.security.UserRightsSetAbstract;
import java.io.File;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
//import org.infotechservice.GostCrypto.CryptoException;
//import org.infotechservice.GostCrypto.GostSignatureProvider;
//import org.infotechservice.GostCrypto.SignatureManager;
//import org.infotechservice.GostCrypto.storage.HDImgStorage;



/**
* Делегат, представляющий доступ к 1 записи в таблице collaborator - сотрудник.
* @author Администратор
*/
public abstract class CollaboratorLocalAbstract
        <BEANINTERFACE extends CollaboratorBeanRemoteAbstract,
            COLLABDETAILS extends CollaboratorDetailsAbstract,
            CLIENTDELEGATE extends ClientLocalAbstract>
        extends DelegateLine2<BEANINTERFACE, COLLABDETAILS> {

    private RightsInfo rights = new RightsInfo(getEDM());
    private PanelInfo panels = new PanelInfo(getEDM());
    private RightsMapInfo rightsMap = new RightsMapInfo(getEDM());
    private DECClientAbstract<CLIENTDELEGATE> client = initClientCache();

//    private GostSignatureProvider provider;
//    private DataStorage dataStorage;
    private PrivateKey key;
    private X509Certificate certificate;

//    private SignatureManager signatureManager;

    private static String br = (System.getProperty("os.name").indexOf("windows") > -1) ? "\\" : "/";
    private static String cert_stub_path = System.getProperty("user.home") + br + "Certificate_stub";

    private static int getSignVersion(){
        //STUB
        return 1;
        //END STUB
    }

    protected void initCrypto() throws ClipsException {//STUB
//        try {
//            if (isNewlyCreated()){
//                return;
//            }
////            if (!isNewlyCreated() || ){
//                provider = GostSignatureProvider.getInstance();
//                File f = new File(getStorePath());
//                if (!f.exists()){
//                    throw new ClipsException("Не найдено хранилище ключей");
//                }
//                HDImgStorage dataStorage = new HDImgStorage(f);
//                if (dataStorage == null){
//                    throw new ClipsException("Не найдено хранилище ключей");
//                }
//                certificate = dataStorage.getCertificate();
//                key = dataStorage.getPrivateKey();
//                if (certificate == null){
//                    throw new ClipsException("У вас нет сертификата открытого ключа");
//                }
//                if (key == null){
//                    throw new ClipsException("У вас нет открытого ключа");
//                }
//                checkCertificate();
//                signatureManager = provider.getSignatureManager(getSignVersion());
////            }
//        } catch (ClipsException ex){
//            if (this.getID() != UserInfoAbstract.get().getCollaborator().getID()){
//                MessageBox.printStackTrace(ex);
//                return;
//            }else{
//                throw ex;
//            }
//        } catch (CryptoException ex) {
//            throw new ClipsException("Ошибка системы защиты информации", ex);
//        }
    }

    private String getStorePath(){
        return cert_stub_path + br + getID();
    }

   
    public CollaboratorLocalAbstract(CLIENTDELEGATE c) throws ClipsException {
        super(c.getAuditListener());
        client.initBy(c);
    }

    public CollaboratorLocalAbstract(int id, AuditListener al) throws ClipsException {
        super(id, al);
    }

    public CollaboratorLocalAbstract(COLLABDETAILS details, AuditListener al) throws ClipsException {
        super(details, al);
    }

    abstract protected DECClientAbstract<CLIENTDELEGATE> initClientCache()throws ClipsException;

    public CLIENTDELEGATE getClient() throws ClipsException {
        return client.get();
    }

    public int changePassword(char[] aNewPassword, char[] oldPassword) throws ClipsException {
        int r;
        try {
            ModificationInfo mi = getBean().changePassword(
                    SessionPassword.getPasswordHash(aNewPassword),
                    SessionPassword.getPasswordHash(oldPassword));
            r = mi.getId();
            auditDetailsList.addAll(mi.getAudit());
            fireAuditEvent();
        } catch (Exception ex) {
            clearBean();
            throw new ClipsException("Не удалось сменить пароль", ex);
        }
        fireContentStateEvent();
        return r;
    }

    public Set<UserRight> getRights() throws ClipsException {
        return new HashSet<UserRight>(rights.get());
    }

    /**
     * меняет текущие права на заданные
     * @param urList
     * @throws ClipsException
     */
    public void setRights(Set<UserRight> urList) throws ClipsException {
        for (UserRight userRight : urList) {
            int rightMask = getRightMask(userRight.getGroup());
            rightMask |= userRight.getRightsMask();
            setRightsMask(userRight.getGroup(), rightMask);
        }
        rights.set(new HashSet<UserRight>(urList));
    }

    /**
     * Возвращает набор панелей для данного сотрудника
     * @return
     * @throws ClipsException
     */
    public Set<UserPanel> getPanels() throws ClipsException {
        return new HashSet<UserPanel>(panels.get());
    }

    /**
     * меняет набор панелей сотрудника
     * @param panels
     * @throws ClipsException
     */
    public void setPanels(Set<UserPanel> panels) throws ClipsException {
        this.panels.set(new HashSet<UserPanel>(panels));
        fireContentStateEvent();
    }

   
    public String getLDAPName() throws ClipsException {
        return getDetails().ldapName;
    }

    public void setLDAPName(String ldapName) throws ClipsException {
        getDetails().ldapName = ldapName;
        fireContentStateEvent();
    }

    /**
     * Возвращает ФИО сотрудника в формате Фамилия И.О.
     * @return
     */
    @Override
    public String toString() {
        try {
            return getClient().getFIO();
        } catch (ClipsException ex) {
            return "ОШИБКА";
        }
    }

    /**
     * Получение конфигурации ГУИ для пользователя
     * @return конфигурация
     * @throws ClipsException
     */
    public GUIConfig getGuiConfig() throws ClipsException {
        try {
            String s = getBean().getGUIConfig();
            GUIConfig config = new GUIConfig(s);
            return config;
        } catch (Exception ex) {
            clearBean();
            throw new ClipsException("Не удалось получить настройки для текущего пользователя", ex);
        }
    }

    /**
     * Назначает конфигурацию ГУИ для позльзователя
     * @param config конфигурация
     * @throws ClipsException
     */
    public void saveGuiConfig(GUIConfig config) throws ClipsException {
        try {
            ModificationInfo mi = getBean().setGUIConfig(config.toXML());
            auditDetailsList.addAll(mi.getAudit());
            fireAuditEvent();
        } catch (Exception ex) {
            clearBean();
            throw new ClipsException("Не удалось сохранить настройки для текущего пользователя", ex);
        }
    }

    public void setFired(boolean fired) throws ClipsException {
        getDetails().hidden = fired;
        fireContentStateEvent();
    }

    public boolean isFired() throws ClipsException {
        return getDetails().hidden;
    }
   
    public int getRightMask(UserRightsGroup group) throws ClipsException{
        int mask = rightsMap.get().get(group.getTitle());
        System.out.println("GET RIGHT MASK group: " + group + " mask: " + mask);
        return mask;
    }
   
    public void setRightsMask(UserRightsGroup group, int mask) throws ClipsException{
        Map<String, Integer> map = new HashMap<String, Integer>(rightsMap.get());
        map.put(group.getTitle(), mask);
        rightsMap.set(map);
//        rightsMap.get().put(group.getTitle(), mask);
//        System.out.println("SET RIGHT MASK group: " + group + " mask: " + mask);
        fireContentStateEvent();
    }


    private class RightsMapInfo extends DelegateExtraData<Map<String, Integer>>{

        public RightsMapInfo(ExtraDataManager contaner) {
            super(contaner);
        }

        @Override
        protected void saveDB() throws Exception {
            ModificationInfo mi = getBean().setRightsMask(this.get());
            auditDetailsList.addAll(mi.getAudit());
            fireAuditEvent();
        }

        @Override
        protected Map<String, Integer> init() throws Exception {
            return getBean().getRightsMask();
        }

        @Override
        protected Map<String, Integer> initNew() {
            return null;
        }

    }
    /**
     *
     */
    private class RightsInfo extends DelegateExtraData<Set<UserRight>> {

        public RightsInfo(ExtraDataManager contaner) {
            super(contaner);
        }

        @Override
        protected Set<UserRight> init() throws Exception {
            Iterator<Integer> ri = getBean().getRights().iterator();
            Set<UserRight> rs = new HashSet<UserRight>();
            while (ri.hasNext()) {
                rs.add(UserRightsSetAbstract.getRightFromID(ri.next()));
            }
            return rs;
        }

        @Override
        protected void saveDB() throws Exception {
            Set<Integer> si = new HashSet<Integer>();
            Iterator<UserRight> it = rights.get().iterator();
            while (it.hasNext()) {
                UserRight userRights = it.next();
                si.add(userRights.getID());
            }
            ModificationInfo mi = getBean().setRights(si);
            auditDetailsList.addAll(mi.getAudit());
            fireAuditEvent();
        }

        @Override
        protected Set<UserRight> initNew() {
            return null;
        }
    }

    /**
     *
     */
    private class PanelInfo extends DelegateExtraData<Set<UserPanel>> {

        public PanelInfo(ExtraDataManager contaner) {
            super(contaner);
        }

        @Override
        protected Set<UserPanel> init() throws Exception {
            initCrypto();
            Iterator<String> ri = getBean().getPanelList().iterator();
            Set<UserPanel> rs = new HashSet<UserPanel>();
            while (ri.hasNext()) {
                try {
                    UserPanel up = UserPanel.getPanel(ri.next());
          if (up != null) {
            rs.add(up);
          }
                } catch (ClipsException ex) {
                    MessageBox.showExceptionOnly(ex);
                }
            }
            return rs;
        }

        @Override
        protected void saveDB() throws Exception {
            Set<String> si = new HashSet<String>();
            Iterator<UserPanel> it = get().iterator();
            while (it.hasNext()) {
                UserPanel userPanel = it.next();
                si.add(userPanel.getClassName());
            }
            ModificationInfo mi = getBean().setPanelList(si);
            auditDetailsList.addAll(mi.getAudit());
            fireAuditEvent();
        }

        @Override
        protected Set<UserPanel> initNew() {
            return null;
        }
    }

    /**
     *
     */
    private class GUIConfigInfo extends DelegateExtraData<String> {

        public GUIConfigInfo(ExtraDataManager contaner) {
            super(contaner);
        }

        @Override
        protected String init() throws Exception {
            String s = getBean().getGUIConfig();
            GUIConfig config = new GUIConfig(s);
            return config.toXML();
        }

        @Override
        protected void saveDB() throws Exception {
            getBean().setGUIConfig(get());
        }

        @Override
        protected String initNew() {
            return null;
        }
    }


    public boolean haveCertificate() throws ClipsException{
//        try {
//            if (signatureManager == null){
//                initCrypto();
//            }
//            return dataStorage != null && dataStorage.getCertificate() != null;
//            return certificate != null;
//        } catch (CryptoException ex) {
//            throw new ClipsException("Не удалось получить сведенья о наличии у сотрудника сертификата", ex);
//        }
        return true;//STUB
    }

    public byte[] sign(byte[] data) throws ClipsException{//STUB
//        long t1 = new Date().getTime();
//        try {
//            if (!haveCertificate() || key == null){
//                throw new ClipsException("Для подписывания данных необходимо иметь сертификат и закрытый ключ!");
//            }
////            PrivateKey privateKey = dataStorage.getPrivateKey();
//            System.out.println("SIGNATURE private key load in " + (new Date().getTime() - t1) + " ms");
//            long t2 = new Date().getTime();
//            byte[] signData = signatureManager.signData(data, key);
//            System.out.println("SIGNATURE data sign in " + (new Date().getTime() - t2) + " ms");
//            return signData;
//        } catch (CryptoException ex) {
//            throw new ClipsException("Не удалось подписать данные", ex);
//        }
        return Arrays.copyOf(data, 10);//STUB
    }

    /**
     *
     * @throws ClipsException
     */
    @Deprecated
    public void createCertificate() throws ClipsException{
//        try {
//            if (dataStorage != null && dataStorage.getCertificate() != null){
//                throw new ClipsException("Сотрудник уже имеет сертификат");
//            }
//            if (dataStorage == null){
//                File f = new File(getStorePath());
//                if (!f.exists()){
//                    f.mkdir();
//                }
//                dataStorage = new HDImgStorage(f);
//
//            }
//                CertManager certManager = provider.getCertManager();
//                KeyPair kp = certManager.generateKeys();
//                X509dhName x509dhName = null;
//
//                DirectoryEnterpriseItemAbstract currentEnterprise = ConfigLocalAbstract.getInstance().getCurrentEnterprise();
//                String fio = DirectoryLocator.getDirectory(DirectoryCollaborator.class).getItemFromID(getID()).getTitle();
//                if (currentEnterprise != null && currentEnterprise.getAddress() != null){
//                    Address address = currentEnterprise.getAddress();
//                    x509dhName = new X509dhName("RU", address.getRegionTitle(), address.getCityTitle(), currentEnterprise.getTitle(), "", fio, "");
//                    System.out.println(x509dhName.getName());
//                }else{
//                    x509dhName = new X509dhName("RU", "", "", "", "", fio, "");
//                }
//                if (x509dhName != null){
//                    X509Certificate certificate = certManager.generateX509(kp, x509dhName);
//                    dataStorage.saveKeyAndCert(kp.getPrivate(), certificate);
//                }else{
//                    throw new ClipsException("Данные сотрудника недоступны");
//                }
//
//        } catch (CryptoException ex) {
//            throw new ClipsException("Не создать сертификат", ex);
//        }
    }

    /**
     *
     * @return may be null
     */
    public String getCertificateText() throws ClipsException {
//        try {
            return certificate.toString();
//        } catch (CryptoException ex) {
//            throw new ClipsException("Не удалось получить сертификаит", ex);
//        }
    }

    public String getCertificateNumber() throws ClipsException{
//        try {
        return "";
        //    return certificate.getSerialNumber().toString();
//        } catch (CryptoException ex) {
//            throw new ClipsException("Не удалось получить сертификаит", ex);
//        }
    }

    public void addCertificate() throws ClipsException{
        try {
            byte[] encoded = certificate.getEncoded();
            getBean().addCurrentCertificate(encoded);
        } catch (Exception ex) {
            throw new ClipsException("Не удалось сохранить сертификаит", ex);
        }
    }

    private void checkCertificate() throws ClipsException{
        try {
            if (UserInfoAbstract.get().isSuperUser()){
                return;
            }
            byte[] encoded = certificate.getEncoded();
            if (!getBean().isCurrentCertificate(encoded)){
                throw new ClipsException("Используемый сертификат не подтверждён, обратитесь к администратору");
            }
        } catch (Exception ex) {
            throw new ClipsException("Ошибка при проверке сертификата", ex);
        }
    }

}
TOP

Related Classes of cli_fmw.delegate.collaborator.CollaboratorLocalAbstract

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.