Package org.waveprotocol.box.server.util

Source Code of org.waveprotocol.box.server.util.RegistrationUtil

/**
* 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.util;

import org.waveprotocol.box.server.account.HumanAccountDataImpl;
import org.waveprotocol.box.server.authentication.PasswordDigest;
import org.waveprotocol.box.server.persistence.AccountStore;
import org.waveprotocol.box.server.persistence.PersistenceException;
import org.waveprotocol.box.server.robots.agent.welcome.WelcomeRobot;
import org.waveprotocol.wave.model.wave.InvalidParticipantAddress;
import org.waveprotocol.wave.model.wave.ParticipantId;
import org.waveprotocol.wave.util.logging.Log;

import java.io.IOException;

/**
* User Registration utility methods.
*
* @author ali@lown.me.uk (Ali Lown)
*/
public class RegistrationUtil {

  private static final Log LOG = Log.get(RegistrationUtil.class);

  private RegistrationUtil() {
  }

  /**
   * Checks if a new username is correct and generates its ParticipantId. On error returns
   * exception containing an error message. On success, returns the id.
   *
   * @param domain the domain
   * @param username the new username
   * @return the new participant id
   * @throws InvalidParticipantAddress if the new username is an invalid participant address
   */
  public static ParticipantId checkNewUsername(String domain, String username) throws InvalidParticipantAddress {
    ParticipantId id = null;

      // First, some cleanup on the parameters.
      if (username == null) {
        throw new InvalidParticipantAddress(username, "Username portion of address cannot be empty");
      }
      username = username.trim().toLowerCase();
      if (username.contains(ParticipantId.DOMAIN_PREFIX)) {
        id = ParticipantId.of(username);
      } else {
        id = ParticipantId.of(username + ParticipantId.DOMAIN_PREFIX + domain);
      }
      if (id.getAddress().indexOf("@") < 1) {
        throw new InvalidParticipantAddress(username, "Username portion of address cannot be empty");
      }
      String[] usernameSplit = id.getAddress().split("@");
      if (usernameSplit.length != 2 || !usernameSplit[0].matches("[\\w\\.]+")) {
        throw new InvalidParticipantAddress(username, "Only letters (a-z), numbers (0-9), and periods (.) are allowed in Username");
      }
      if (!id.getDomain().equals(domain)) {
        throw new InvalidParticipantAddress(username,"You can only create users at the " + domain + " domain");
      }
    return id;
  }

  public static boolean createAccountIfMissing(AccountStore accountStore, ParticipantId id,
      PasswordDigest password, WelcomeRobot welcomeBot) {
    HumanAccountDataImpl account = new HumanAccountDataImpl(id, password);
    try {
      LOG.info("Registering new account for" + id);
      accountStore.putAccount(account);
    } catch (PersistenceException e) {
      LOG.severe("Failed to cretaea new account for " + id, e);
      return false;
    }
    try {
      welcomeBot.greet(account.getId());
    } catch (IOException e) {
      LOG.warning("Failed to create a welcome wavelet for " + id, e);;
    }
    return true;
  }

  public static boolean doesAccountExist(AccountStore accountStore, ParticipantId id) {
    try {
      if (accountStore.getAccount(id) != null) {
        return true;
      }
    }
    catch (PersistenceException e) {
      LOG.severe("Failed to retrieve account data for " + id, e);
      throw new RuntimeException("An unexpected error occurred trying to retrieve account status");
    }
    return false;
  }
}
TOP

Related Classes of org.waveprotocol.box.server.util.RegistrationUtil

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.