Package ru.aristar.jnuget

Source Code of ru.aristar.jnuget.NugetContext$ContextPackageEntry

package ru.aristar.jnuget;

import java.io.IOException;
import java.net.URI;
import java.security.NoSuchAlgorithmException;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.aristar.jnuget.files.NugetFormatException;
import ru.aristar.jnuget.files.Nupkg;
import ru.aristar.jnuget.rss.NuPkgToRssTransformer;
import ru.aristar.jnuget.rss.PackageEntry;
import ru.aristar.jnuget.security.ApiKeyCallbackHandler;
import ru.aristar.jnuget.security.Role;
import ru.aristar.jnuget.security.RolePrincipal;

/**
*
* @author sviridov
*/
public class NugetContext {

    /**
     * Логгер
     */
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    /**
     * Коневой URI приложения
     */
    private final URI rootUri;
    /**
     * Праметры авторизации пользователя
     */
    protected Subject subject;
    /**
     * Контекст авторизации пользователя
     */
    private LoginContext loginContext;

    /**
     * @param rootUri коневой URI приложения
     */
    public NugetContext(URI rootUri) {
        this.rootUri = rootUri;
        logger.debug("Создан контекст для приложения {}", new Object[]{rootUri});
    }

    /**
     * @return коневой URI приложения
     */
    public URI getRootUri() {
        return rootUri;
    }

    /**
     * Создает RSS вложение с информацией о пакете (дополняет его информацией от
     * сервера)
     *
     * @param nupkgFile пакет
     * @return RSS вложение
     * @throws NoSuchAlgorithmException ошибка вычисления HASH
     * @throws IOException ошибка чтения пакета
     * @throws NugetFormatException некорректная спецификация пакета
     */
    public PackageEntry createPackageEntry(Nupkg nupkgFile) throws NoSuchAlgorithmException, IOException, NugetFormatException {
        return new ContextPackageEntry(nupkgFile);
    }

    /**
     * Создает преобразователь пакетов в RSS ленту
     *
     * @return преобразователь пакетов в RSS ленту
     */
    public NuPkgToRssTransformer createToRssTransformer() {
        return new ContextNuPkgToRssTransformer();
    }

    /**
     * Авторизоваться в системе
     *
     * @param apiKey ключ авторизации
     * @throws LoginException ошибка авторизации
     */
    public void login(String apiKey) throws LoginException {
        this.loginContext = new LoginContext("ApikeyXmlAuth", new ApiKeyCallbackHandler(apiKey));
        loginContext.login();
        this.subject = loginContext.getSubject();
    }

    /**
     * Выйти из системы
     */
    public void logout() {
        try {
            loginContext.logout();
        } catch (LoginException ex) {
            logger.warn("Ошибка при выходе пользователя из системы", ex);
        }
    }

    /**
     * Обладает ли пользователь указанной ролью
     *
     * @param role роль
     * @return true, если у пользователя есть указанная роль
     */
    public boolean isUserInRole(Role role) {
        for (RolePrincipal rolePrincipal : subject.getPrincipals(RolePrincipal.class)) {
            if (rolePrincipal.getRole().contains(role)) {
                return true;
            }
        }
        return false;
    }

    /**
     * Преобразователь в RSS, содержащий контекст
     */
    private class ContextNuPkgToRssTransformer extends NuPkgToRssTransformer {

        @Override
        protected NugetContext getContext() {
            return NugetContext.this;
        }
    }

    /**
     * RSS вложение, содержащее контекст
     */
    private class ContextPackageEntry extends PackageEntry {

        /**
         * @param nupkgFile пакет на основе кторого создается RSS вложение
         * @throws NoSuchAlgorithmException не указан алгоритм вычисления HASH
         * @throws IOException ошибка чтения пакета
         * @throws NugetFormatException некорректная спецификация пакета
         */
        public ContextPackageEntry(Nupkg nupkgFile) throws NoSuchAlgorithmException, IOException, NugetFormatException {
            super(nupkgFile);
        }

        @Override
        protected String getRootUri() {
            return NugetContext.this.rootUri.toString();
        }
    }
}
TOP

Related Classes of ru.aristar.jnuget.NugetContext$ContextPackageEntry

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.