Package org.waveprotocol.box.server.robots.agent.registration

Source Code of org.waveprotocol.box.server.robots.agent.registration.RegistrationRobot

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.waveprotocol.box.server.robots.agent.registration;

import static org.waveprotocol.box.server.robots.agent.RobotAgentUtil.CANNOT_CREATE_USER;
import static org.waveprotocol.box.server.robots.agent.RobotAgentUtil.createUser;

import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.Singleton;
import com.google.inject.name.Names;

import org.apache.commons.cli.CommandLine;
import org.waveprotocol.box.server.CoreSettings;
import org.waveprotocol.box.server.persistence.AccountStore;
import org.waveprotocol.box.server.persistence.PersistenceException;
import org.waveprotocol.box.server.robots.agent.AbstractCliRobotAgent;
import org.waveprotocol.wave.model.wave.InvalidParticipantAddress;
import org.waveprotocol.wave.model.wave.ParticipantId;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
* Robot agent that handles the user registration by an admin
*
* @author ali@lown.me.uk (Ali Lown)
*/
@SuppressWarnings("serial")
@Singleton
public final class RegistrationRobot extends AbstractCliRobotAgent {

  private static final Logger LOG = Logger.getLogger(RegistrationRobot.class.getName());
  public static final String ROBOT_URI = AGENT_PREFIX_URI + "/registration/admin";

  /** The address of the admin user as defined in the server configuration. */
  private final String serverAdminId;

  /** Account store with user and robot accounts. */
  private final AccountStore accountStore;

  @Inject
  public RegistrationRobot(Injector injector) {
    super(injector);
    serverAdminId =
        injector.getInstance(Key.get(String.class, Names.named(CoreSettings.ADMIN_USER)));
    accountStore = injector.getInstance(AccountStore.class);
  }

  @Override
  protected String maybeExecuteCommand(CommandLine commandLine, String modifiedBy) {
    String robotMessage = null;
    String adminId = modifiedBy;
    // Verify that the user that attempts to create a user has admin privileges.
    if (!adminId.equals(serverAdminId)) {
      robotMessage =
          "User " + adminId + " is not authorized to use " + getCommandName() + " command.";
    } else {
      String userId = null;
      try {
        String[] args = commandLine.getArgs();
        userId = args[1];
        String password = args[2];
        // Add domain to the user id if needed.
        userId = userId + (userId.contains("@") ? "" : "@" + getWaveDomain());
        ParticipantId participantId = ParticipantId.of(userId);
        createUser(accountStore, participantId, password);
        robotMessage = String.format("Created user %s, the password is: %s\n", userId, password);
        LOG.log(Level.INFO, "Created user " + userId + " by " + adminId);
      } catch (IllegalArgumentException e) {
        LOG.log(Level.SEVERE, userId, e);
        robotMessage = e.getMessage();
      } catch (PersistenceException e) {
        robotMessage = CANNOT_CREATE_USER + userId;
        LOG.log(Level.SEVERE, "userId: " + userId, e);
      } catch (InvalidParticipantAddress e) {
        robotMessage = CANNOT_CREATE_USER + userId;
        LOG.log(Level.SEVERE, "userId: " + userId, e);
      }
    }

    return robotMessage;
  }

  @Override
  public int getMinNumOfArguments() {
    return 2;
  }

  @Override
  public int getMaxNumOfArguments() {
    return 2;
  }

  @Override
  public String getCommandName() {
    return "register";
  }

  @Override
  public String getFullDescription() {
    return getShortDescription() + "\n" + getUsage() + "\nExample: " + getCommandName() + " "
        + getExample();
  }

  @Override
  public String getCmdLineSyntax() {
    return "[OPTIONS] [USERNAME] [PASSWORD]";
  }

  @Override
  public String getExample() {
    return "user_id password";
  }

  @Override
  public String getShortDescription() {
    return "The command allows the admin to register other users. "
    + "Please make sure to use it in a wave without other participants. "
    + "It is also advised to remove yourself from the wave "
    + "when you finished creating users.";
  }

  @Override
  public String getRobotName() {
    return "Registration-Bot";
  }

  @Override
  public String getRobotUri() {
    return ROBOT_URI;
  }

  @Override
  public String getRobotId() {
    return "registration-bot";
  }
}
TOP

Related Classes of org.waveprotocol.box.server.robots.agent.registration.RegistrationRobot

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.