All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opendaylight.aaa.cli.jar.StandaloneCommandLineInterface Maven / Gradle / Ivy

There is a newer version: 0.20.3
Show newest version
/*
 * Copyright (c) 2016 - 2017 Red Hat, Inc. and others. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */
package org.opendaylight.aaa.cli.jar;

import static java.util.Objects.requireNonNull;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import org.opendaylight.aaa.api.IDMStoreException;
import org.opendaylight.aaa.api.IIDMStore;
import org.opendaylight.aaa.api.StoreBuilder;
import org.opendaylight.aaa.api.model.User;
import org.opendaylight.aaa.api.password.service.PasswordHashService;
import org.opendaylight.aaa.datastore.h2.H2Store;
import org.opendaylight.aaa.datastore.h2.IdmLightConfig;
import org.opendaylight.aaa.datastore.h2.IdmLightConfigBuilder;
import org.opendaylight.aaa.datastore.h2.IdmLightSimpleConnectionProvider;
import org.opendaylight.aaa.impl.password.service.DefaultPasswordHashService;

/**
 * AAA CLI interface.
 * This is for a "standalone Java" environment (i.e. plain JSE; non-OSGi, no Karaf).
 *
 * @author Michael Vorburger.ch
 */
public class StandaloneCommandLineInterface {

    private final IIDMStore identityStore;
    private final StoreBuilder storeBuilder;
    private static final String DOMAIN = IIDMStore.DEFAULT_DOMAIN;
    private final PasswordHashService passwordService;

    public StandaloneCommandLineInterface(File directoryWithDatabaseFile) throws IOException, IDMStoreException {
        IdmLightConfigBuilder configBuider = new IdmLightConfigBuilder();
        configBuider.dbDirectory(directoryWithDatabaseFile.getCanonicalPath()).dbUser("foo").dbPwd("bar");
        IdmLightConfig config = configBuider.build();

        passwordService = new DefaultPasswordHashService();

        H2Store h2Store = new H2Store(new IdmLightSimpleConnectionProvider(config), passwordService);
        this.identityStore = h2Store;

        this.storeBuilder = new StoreBuilder(h2Store);
        storeBuilder.initDomainAndRolesWithoutUsers(DOMAIN);
    }

    public List getAllUserNames() throws IDMStoreException {
        List users = identityStore.getUsers().getUsers();
        return users.stream().map(User::getName).collect(Collectors.toList());
    }

    public boolean resetPassword(String userIdWithoutDomain, String newPassword) throws IDMStoreException {
        Optional optUser = getSingleUser(userIdWithoutDomain);
        if (!optUser.isPresent()) {
            return false;
        } else {
            User user = optUser.orElseThrow();
            user.setPassword(newPassword);
            identityStore.updateUser(user);
            return true;
        }
    }

    /**
     * Check a user's password.
     * See Bug 8721 requirement.
     */
    public boolean checkUserPassword(String userIdWithoutDomain, String password) throws IDMStoreException {
        Optional optUser = getSingleUser(userIdWithoutDomain);
        if (!optUser.isPresent()) {
            return false;
        } else {
            User user = optUser.orElseThrow();
            return passwordService.passwordsMatch(password, user.getPassword(), user.getSalt());
        }
    }

    private Optional getSingleUser(String userIdWithoutDomain) throws IDMStoreException {
        requireNonNull(userIdWithoutDomain, "userIdWithoutDomain == null");
        List users = identityStore.getUsers(userIdWithoutDomain, DOMAIN).getUsers();
        if (users.isEmpty()) {
            return Optional.empty();
        }
        if (users.size() > 1) {
            throw new IDMStoreException("More than 1 user found: " + userIdWithoutDomain);
        }
        return Optional.of(users.get(0));
    }

    public void createNewUser(String userName, String password, boolean isAdmin) throws IDMStoreException {
        requireNonNull(userName, "userName == null");
        storeBuilder.createUser(DOMAIN, userName, password, isAdmin);
    }

    public boolean deleteUser(String userIdWithoutDomain) throws IDMStoreException {
        requireNonNull(userIdWithoutDomain, "userIdWithoutDomain == null");
        return storeBuilder.deleteUser(DOMAIN, userIdWithoutDomain);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy