Package net.sourceforge.jwbf.mediawiki.actions.login

Source Code of net.sourceforge.jwbf.mediawiki.actions.login.PostLogin

/*
* Copyright 2007 Thomas Stock.
*
* Licensed 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.
*
* Contributors:
* Philipp Kohl
* Carlos Valenzuela
*/
package net.sourceforge.jwbf.mediawiki.actions.login;


import static net.sourceforge.jwbf.mediawiki.actions.MediaWiki.Version.MW1_11;
import static net.sourceforge.jwbf.mediawiki.actions.MediaWiki.Version.MW1_12;
import static net.sourceforge.jwbf.mediawiki.actions.MediaWiki.Version.MW1_13;
import static net.sourceforge.jwbf.mediawiki.actions.MediaWiki.Version.MW1_14;
import static net.sourceforge.jwbf.mediawiki.actions.MediaWiki.Version.MW1_15;

import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;

import net.sourceforge.jwbf.core.actions.Post;
import net.sourceforge.jwbf.core.actions.util.HttpAction;
import net.sourceforge.jwbf.core.actions.util.ProcessException;
import net.sourceforge.jwbf.mediawiki.actions.util.MWAction;
import net.sourceforge.jwbf.mediawiki.actions.util.SupportedBy;
import net.sourceforge.jwbf.mediawiki.contentRep.LoginData;

import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;
/**
*
* @author Thomas Stock
*/
@SupportedBy({ MW1_11, MW1_12, MW1_13, MW1_14, MW1_15 })
public class PostLogin extends MWAction {

  private final Logger log = Logger.getLogger(PostLogin.class);
  private Post msg;


  private final String success = "Success";
  private final String wrongPass = "WrongPass";
  private final String notExists = "NotExists";
  private final String needToken = "NeedToken";
  private LoginData login = null;
    private boolean reTry = false;
    private boolean reTryLimit = true;
    private final String username;
    private final String pw;
    private final String domain;

  /**
   *
   * @param username the
   * @param pw password
   * @param domain a
   * @param login a
   */
  public PostLogin(final String username, final String pw, final String domain, LoginData login) {
    super();
    this.login = login;
    this.username = username;
    this.pw = pw;
    this.domain = domain;
    msg = getLoginMsg(username, pw, domain, null);

  }

    private Post getLoginMsg(final String username, final String pw,
            final String domain, final String token) {
        Post pm = new Post("/api.php?action=login&format=xml");
        pm.addParam("lgname", username);
        pm.addParam("lgpassword", pw);
        if (domain != null)
            pm.addParam("lgdomain", domain);
        if (token != null) {
            pm.addParam("lgtoken", token);
        }
        return pm;
    }

  /**
   * {@inheritDoc}
   */
  @Override
  public String processAllReturningText(final String s) throws ProcessException {
    SAXBuilder builder = new SAXBuilder();
    Element root = null;
    try {
      Reader i = new StringReader(s);
      Document doc = builder.build(new InputSource(i));

      root = doc.getRootElement();
      findContent(root);
    } catch (JDOMException e) {
      log.error(e.getClass().getName() + e.getLocalizedMessage());
    } catch (IOException e) {
      log.error(e.getClass().getName() + e.getLocalizedMessage());
    } catch (NullPointerException e) {
      log.error(e.getClass().getName() + e.getLocalizedMessage());
      throw new ProcessException("No regular content was found, check your api\n::" + s);
    } catch (Exception e) {
      log.error(e.getClass().getName() + e.getLocalizedMessage());
      throw new ProcessException(e.getLocalizedMessage());
    }


    return s;
  }
  /**
   *
   * @param startElement the, where the search begins
   * @throws ProcessException if problems with login
   */
  private void findContent(final Element startElement) throws ProcessException {

    Element loginEl = startElement.getChild("login");
    String result = loginEl.getAttributeValue("result");
    if (result.equalsIgnoreCase(success)) {
      Map<String, String> properties = new HashMap<String, String>();
      properties.put("userId", loginEl.getAttribute("lguserid").toString());
      login.setup(loginEl.getAttributeValue("lgusername"), true);
    } else if (result.equalsIgnoreCase(needToken) && reTryLimit ) {
      msg = getLoginMsg(username, pw, domain, loginEl.getAttributeValue("token"));
      reTry = true;
      reTryLimit = false;
    } else if (result.equalsIgnoreCase(wrongPass)) {
      throw new ProcessException("Wrong Password");
    } else if (result.equalsIgnoreCase(notExists)) {
      throw new ProcessException("No such User");
    }

  }
  /**
   * {@inheritDoc}
   */
  public HttpAction getNextMessage() {
    return msg;
  }

    /* (non-Javadoc)
     * @see net.sourceforge.jwbf.mediawiki.actions.util.MWAction#hasMoreMessages()
     */
    @Override
    public boolean hasMoreMessages() {
        boolean temp = super.hasMoreMessages() || reTry;
        reTry  = false;
        return temp;
    }

}
TOP

Related Classes of net.sourceforge.jwbf.mediawiki.actions.login.PostLogin

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.