import ws.*;

public class p_Login
{
  public WTableList Request(WServer oServer, WParamList oParamList)
  { 
    int rc, NumOfRows;
    WTableList oTableList, oTableListRun;
    WParamList oParamListRun;
    WTable     oTableRun, oTable;
    String     szUserName, szUserPwd, szDomain;
    String     sziUserName, sziUserPwd;
    WUtil      oUtil;

    oTableList    = new WTableList(oServer);
    oTableListRun = new WTableList(oServer);
    oParamListRun = new WParamList(oServer);
    oTableRun     = new WTable(oServer);
    oTable        = new WTable(oServer);
    oUtil         = new WUtil();

    // Params
    szUserName = oParamList.GetParam(0);
    szUserPwd  = oParamList.GetParam(1);

    oTable.CreateCol(100);  // 0 Msg
    oTable.CreateCol(50);   // 1 UserName
    oTable.CreateCol(50);   // 2 UserPwd
    oTable.CreateRow();

    oParamListRun.Clean();
    oParamListRun.CreateParam(szUserName);
    oParamListRun.CreateParam(szUserPwd);
    rc = oServer.Request("p_CheckUser", oParamListRun, oTableListRun);
    if (rc != 0)
      return oTableListRun;      
    oTableListRun.GetTable(0, oTableRun);

    NumOfRows = oTableRun.GetNumOfRows();
    if (NumOfRows == 0)
    {
      oServer.SetOutputPage("p_LoginFailed");
      oTable.SetField(0,0,"Invalid Name or Password!");
      oTable.SetField(0,1,szUserName);
      oTable.SetField(0,2,szUserPwd);
      oTableList.AddTable(oTable);
      return oTableList; 
    }

    // System login
    rc = oServer.Login("wsdemo");
    // wsdemo is a Passage Server UserName.
    // Private requests, i.e. Access: Private, need login/session, otherwise "Access denied" error is returned.
    // This method creates a session and a cookie jsessionid=...
    if (rc != 0)
    {
      oServer.SetOutputPage("p_LoginFailed");
      oTable.SetField(0,0,"Invalid Passage Server UserName. Please contact technical support.");
      oTable.SetField(0,1,szUserName);
      oTable.SetField(0,2,szUserPwd);
      oTableList.AddTable(oTable);
      return oTableList; 
    }

    //
    oParamListRun.Clean();
    rc = oServer.Request("p_GetMain", oParamListRun, oTableListRun);
    if (rc != 0)
      return oTableListRun;      
    oTableListRun.GetTable(0, oTableRun);
    oTableList.AddTable(oTableRun);  // Table 0

    return oTableList; 
  }
}