<%!

/**********************************************************************
**
**     SAP AG Walldorf
**     (C) Copyright SAP AG 1999-2010
**
***********************************************************************/

#include "publicincl/http_subhdl.inc"
#include "publicincl/tools.inc"

struct icm_auth_status_type
{  
  boolean active;
  string perm_file;
  string auth_file;
  string filt_profile;
  string filt_pattern;
  
};
struct icm_perm_type
{
  int		no;
  string	prefix;
  string	virt_host;
  string	logon_group;
  string	user;
  string	group;
  string	clientip;
  string	serverip;
  string	perm;

  int		flags;
};
%>

<%
  int i, count, nr, rc, dir, user_count, max;
  int rule_count, rule_len, rule_last;
  string hdlsel, what, browser, fld, lastControlID;
  string sstr, prefix;
  string filter_param, rules[];
  string tab_hdlsel[];
  boolean is_admin;

  struct icm_http_subhdl icm_subhdl_tab[];
  struct icm_sort_type sort_tab[];
  struct icm_user_type icm_user_info[];
  struct icm_auth_status_type icm_auth_status;
  struct icm_perm_type icm_perm_tab[];

  const string ssort = "../public/images/sort.gif";
  const string sasc = "../public/images/sortasc.gif";
  const string sdesc = "../public/images/sortdesc.gif";

  sort_tab[0].header = "Permission";
  sort_tab[0].tool = "Sort by permission flag";
  sort_tab[0].ffield = "perm";
  sort_tab[1].header = "URL Prefix";
  sort_tab[1].tool = "Sort by URL prefix";
  sort_tab[1].ffield = "prefix";
  sort_tab[2].header = "Logon Group";
  sort_tab[2].tool = "Sort by Logon Group specification";
  sort_tab[2].ffield = "logon_group";
  sort_tab[3].header = "User";
  sort_tab[3].tool = "Sort by user name";
  sort_tab[3].ffield = "user";
  sort_tab[4].header = "Group";
  sort_tab[4].tool = "Sort by group name";
  sort_tab[4].ffield = "group";
  sort_tab[5].header = "Client IP";
  sort_tab[5].tool = "Sort by client IP address";
  sort_tab[5].ffield = "clientip";
  sort_tab[6].header = "Server IP";
  sort_tab[6].tool = "Sort by server IP address";
  sort_tab[6].ffield = "serverip";
  max = arraylen(sort_tab);
  for (i=0; i < max;i++){
   sort_tab[i].url = ssort;
   sort_tab[i].dir = 0;
  }

  is_admin = __icm_get_system_property ("is_admin");
  browser = __icm_get_browser_type();
  lastControlID = htmlenc(__icm_get_form_field ("lastControlID"));
  what = anumenc(__icm_get_form_field ("what"));
  filter_param = __icm_get_param ("csi/enable");

  count = __icm_http_hdl (2,icm_subhdl_tab,11);
  for (i = 0; i < count; i++) {
    tab_hdlsel[i] = "";
  }

  hdlsel = anumenc(__icm_get_form_field ("hdlsel"));
  if (hdlsel != "")
    tab_hdlsel[hdlsel] = "selected";

  rc = __icm_auth_hdl (1,hdlsel,icm_auth_status);
  rc = __icm_auth_hdl (2,hdlsel,icm_perm_tab);
  
  max = arraylen(icm_perm_tab);
  for (nr = 0; nr < max; nr++) {
    icm_perm_tab[nr].no = nr;
    if ((icm_perm_tab[nr].flags & 3) == 1)
      icm_perm_tab[nr].perm = "Permit";
    if ((icm_perm_tab[nr].flags & 3) == 2)
      icm_perm_tab[nr].perm = "Deny";
    if ((icm_perm_tab[nr].flags & 3) == 3)
      icm_perm_tab[nr].perm = "Secure";
  }

  user_count = 0;
  if ((rc == 0) && (icm_auth_status.auth_file != ""))
    user_count = __icm_get_user_info(icm_auth_status.auth_file, icm_user_info);

  dir  = __icm_get_form_field ("dir");
  sstr = __icm_get_form_field ("sstr");
  if (sstr != "")
    sort (icm_perm_tab, dir, sstr);

  max = arraylen(sort_tab);
  for (i=0; i < max;i++){
   if (sstr == sort_tab[i].ffield){
    if (dir == 1) { sort_tab[i].url = sdesc; sort_tab[i].dir = -1; }
    else if (dir == -1) { sort_tab[i].url = sasc; sort_tab[i].dir = 1; }
    else sort_tab[i].dir = 1;
   }
   else sort_tab[i].dir = 1;
  }

%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <link rel=stylesheet type="text/css" href="../public/css/controls_<%=browser%>.css">
    <link rel=stylesheet type="text/css" href="../public/css/sapbsp.css">
    <title> Access Handler </title>
    <script type="text/javascript" src="../public/js/bspMenu.js"></script>
    <script type="text/javascript">
      <!--
	function callSubmitCombo(form)
	{
	  var Form = document[form];
      	  Form.submit();
	}
      function callSubmitAction(dir,sstr)
      {
        document.sortForm.dir.value = dir;
        document.sortForm.sstr.value = sstr;
        document.sortForm.submit();
      }
      window.onload = function() {
        initializeMenu ("activeMenu", "activeObj");
        //initializeMenu ("inactiveMenu", "inactiveObj");
        initializeMenu ("PermMenu", "permObj");
        initializeMenu ("FilterMenu", "filterObj");
        initializeMenu ("FilterMenu", "filterObj1");
        restoreMenuFocus('<%=lastControlID%>');
      }
      document.onclick=bspMenuHide;
      -->
    </script>
  </head>

  <body class="sapBdy">    
      <div id="activeMenu" class="bspMenuBox" onMouseover="bspMenuHighlight(event)" onMouseout="bspMenuUnHighlight(event)" onClick="bspMenuSelect(event,'activeMenu')" display:none>
<%
if (icm_auth_status.active) {     
%>      
      <div title="Deactivate Handler" class="bspMenuItem" url="./confirm.icp?what=deactivate_auth&amp;hdlsel=<%=hdlsel%>">Deactivate Handler</div>
      <hr>
      <div title="Close Menu" class="bspMenuItem">Close Menu</div>
<%
} else {
%>
      <div title="Activate Handler" class="bspMenuItem" url="./confirm.icp?what=activate_auth&amp;hdlsel=<%=hdlsel%>">Activate Handler</div>
      <hr>
      <div title="Close Menu" class="bspMenuItem">Close Menu</div>
<%
}
%>
      </div>
      
      <div id="FilterMenu" class="bspMenuBox" onMouseover="bspMenuHighlight(event)" onMouseout="bspMenuUnHighlight(event)" onClick="bspMenuSelect(event,'FilterMenu')" display:none>
<%
     if (filter_param == "FALSE" || icm_auth_status.filt_profile == "") {
%>
      <div title="Activate Content Filter" class="bspMenuItem" url="./confirm.icp?what=icm_filter&amp;p1=1">Activate Content Filter</div>
<%
     } else {
%>          
      <div title="Deactivate Content Filter" class="bspMenuItem" url="./confirm.icp?what=icm_filter&amp;p1=0&amp;hdlsel=<%=hdlsel%>">Deactivate Content Filter</div>
<%   }
      if(icm_auth_status.filt_profile != "") {
%>    <div title="Change Content Filter" class="bspMenuItem" url="./filter_admin.icp?afile=filter&amp;hdlsel=<%=hdlsel%>">Change Content Filter</div>        <% } %>
      <hr>
      <div title="Close Menu" class="bspMenuItem">Close Menu</div>
      </div>      
      <div id="PermMenu" class="bspMenuBox" onMouseover="bspMenuHighlight(event)" onMouseout="bspMenuUnHighlight(event)" onClick="bspMenuSelect(event,'PermMenu')" display:none>
      <div title="Reload Permission File" class="bspMenuItem" url="./confirm.icp?what=reload_perm&amp;hdlsel=<%=hdlsel%>">Reload Permission File</div>
      <hr>
      <div title="Close Menu" class="bspMenuItem">Close Menu</div>
      </div>      
      <table border="0" cellspacing="0" cellpadding="0" class="sapTbvAlt" width="100%">
        <form action="" method="GET" name="FormHdl">
	<tr>
          <td class="sapTbvCellAlt" align="left">
	   <b><i><label for="hdlsel">Access Control and Authorization Handler</label> for &nbsp;
	    <select title="Access Handler" id="hdlsel" name="hdlsel" class="sapDdlStd"
	      onChange="callSubmitCombo('FormHdl');">
<%
	if (count == 0)
	  __output("<option value=\"0\">icm/HTTP/auth_0</option>");
	for (i = 0; i < count; i++) {
%>
	    <option value="<%=i%>" <%=tab_hdlsel[i]%>>icm/HTTP/auth_<%=i%></option>
<%
	}
%>
	    </select>
	   </i></b>
          </td>
	  <td class="sapTbvCellAlt">&nbsp;</td>
	  <td class="sapTbvCellAlt" width="250" align="right">
	    <a href="javascript:parent.frames['main'].location.reload()" class="sapBtnEmph" title="refresh page"><nobr>Refresh</nobr></a>
	  </td>
	</tr>

        <tr>
	  <td class="sapTbvCellStd">Access Handler Status</td>
	  <td class="sapTbvCellStd">
<%

if (icm_auth_status.active) {
  if (is_admin) {
	    __output("<a title=\"Access Handler Status Menu\" href=\"javascript:void(0);\" id=\"activeObj\" class=\"sapBtnStd\" onKeyUp=\"bspMenuMainAction('activeMenu', event, this);\" onClick=\"bspMenuMainAction('activeMenu', event, this);\"><i>active</i>");
	    __output("&nbsp;<img border=\"0\" src=\"../public/images/cmenu/Triangle.gif\"></a>");
  } else {
	    __output("<i>active</i>");
  }
	    __output(" <img title=\"green\" alt=\"green\" src=\"../public/icons/s_s_tl_g.gif\">");
} else {
  if (is_admin) {
	    __output("<a title=\"Access Handler Status Menu\" href=\"javascript:void(0);\" id=\"activeObj\" class=\"sapBtnStd\" onKeyUp=\"bspMenuMainAction('activeMenu', event, this);\" onClick=\"bspMenuMainAction('activeMenu', event, this);\"><i>inactive</i>");
	    __output("&nbsp;<img border=\"0\" src=\"../public/images/cmenu/Triangle.gif\"></a>");
  } else {
	    __output("<i>inactive</i>");
  }
	    __output(" <img title=\"red\" alt=\"red\" src=\"../public/icons/s_s_tl_r.gif\">");
}
%>
	  </td>
	  <td class="sapTbvCellStd">&nbsp;</td>
	</tr>

	<tr>
          <td class="sapTbvCellStd">Name of Authentication File:</td>
          <td class="sapTbvCellStd"><%=icm_auth_status.auth_file%>
<%
	if (is_admin && (icm_auth_status.auth_file != "")) {
%>
<%
	}
%>
	  </td>
          <td class="sapTbvCellStd">&nbsp;</td>
	</tr>
	<tr>
          <td class="sapTbvCellStd">Name of Permission File:</td>
          <td class="sapTbvCellStd">
<%
	if (is_admin && (icm_auth_status.perm_file != "")) {
%>
	    <a title="Permission File Menu" href="javascript:void(0);" id="permObj" class="sapBtnStd" onKeyUp="bspMenuMainAction('PermMenu', event, this);" onClick="bspMenuMainAction('PermMenu', event, this);"><%=icm_auth_status.perm_file%>
	      &nbsp;<img border="0" src="../public/images/cmenu/Triangle.gif"></a>
<%
	} else __output (icm_auth_status.perm_file);
%>
	  </td>
          <td class="sapTbvCellStd">&nbsp;</td>
	</tr>
	<tr>
          <td class="sapTbvCellStd">Content Filter:</td>
          <td class="sapTbvCellStd">
<%
	if (icm_auth_status.filt_profile != "") {
	  if (is_admin) {
%>          
            <a href="javascript:void(0);" id="filterObj" class="sapBtnStd" onKeyUp="bspMenuMainAction('FilterMenu', event, this);" onClick="bspMenuMainAction('FilterMenu', event, this);"><%=htmlenc(icm_auth_status.filt_profile)%>
	      &nbsp;<img border="0" src="../public/images/cmenu/Triangle.gif"></a>
<%
	  } else __output (htmlenc(icm_auth_status.filt_profile));
        } 
     if (icm_auth_status.filt_profile == "") {
%>
            <img title="yellow" alt="yellow" src="../public/icons/s_s_tl_y.gif">
            <br>Filter-adapter library (CSA_LIB) not loaded
<%     
     } else {       
       if (filter_param == "FALSE") {
%>
            <img title="red" alt="red" src="../public/icons/s_s_tl_r.gif">
<%
       } else {
%>
            <img title="green" alt="green" src="../public/icons/s_s_tl_g.gif">
<%     }
     }
%>	      
	      </td>
          <td class="sapTbvCellStd">&nbsp;</td>
	</tr>
	<tr>
	  <td class="sapTbvCellStd" Colspan="3">&nbsp;</td>
	</tr>
      </form>
      </table>
<% if (icm_auth_status.filt_profile != "") {
	rule_count = 0;
        if(icm_auth_status.filt_pattern != "") {
           rule_len = strlen(icm_auth_status.filt_pattern);
	   if(strsub(icm_auth_status.filt_pattern,0,1) == "("
	   && strsub(icm_auth_status.filt_pattern,rule_len-1,rule_len) == ")") {
	       nr = 1;
	   } else {
	       nr = 0;	       
	  }
	}
        for (;nr < rule_len; nr++) {
          if(nr > 1
          && strsub(icm_auth_status.filt_pattern,nr-1,nr) == ")"
          && strsub(icm_auth_status.filt_pattern,nr,nr+1) == "|"
          && strsub(icm_auth_status.filt_pattern,nr+1,nr+2) == "(") {				
		rules[rule_count] = strsub(icm_auth_status.filt_pattern,rule_last+1,nr-1);
		rule_last = nr+1;
		rule_count++;
          }
        }
        if(rule_len > 0 ) {
          if(strsub(icm_auth_status.filt_pattern,rule_len-1,rule_len) == ")" ) {
		rules[rule_count] = strsub(icm_auth_status.filt_pattern,rule_last+1,rule_len-1);
		rule_count++;
	  }
	  if(rule_count == 0) {
	     rules[0] = icm_auth_status.filt_pattern;
	     rule_count++;
	  }
        }

%>
    <table border=0 cellspacing=1 cellpadding=0 class="sapTbvAlt" width="100%">
      <tr>
        <td class="sapTbvCellAlt" Colspan=2 width="85%">
	  <b><i>Content Filter
<%
	if (is_admin && (icm_auth_status.filt_profile != "")) {
%>
	    <a href="javascript:void(0);" id="filterObj1" class="sapBtnStd" onKeyUp="bspMenuMainAction('FilterMenu', event, this);" onClick="bspMenuMainAction('FilterMenu', event, this);"><%=htmlenc(icm_auth_status.filt_profile)%>
	      &nbsp;<img border="0" src="../public/images/cmenu/Triangle.gif"></a>
<%
	} else __output (htmlenc(icm_auth_status.filt_profile));
%>
	  </i></b>
        </td>
        <td class="sapTbvCellAlt" align="right"><nobr>
          <a href="./confirm.icp?what=reload_filt&amp;hdlsel=<%=hdlsel%>" class="sapBtnEmph">Reload Rules</a>
          </nobr>
        </td>        
      </tr>      
      
<%
      if( rule_count == 0 ) {
      	__output("<tr><td class=\"sapTbvCellStd\" colspan=\"3\">no rule</td></tr>");
      } else {
%>
      <tr>
        <td class="sapTbvCellAlt" width="2%">
          <i>&nbsp;</i>
        </td>
        <td class="sapTbvCellAlt" colspan="2" width="99%">
          <i>Rule</i>
        </td>
      </tr>
<%      
        for (nr = 0; nr < rule_count; nr++) {
%>
      <tr>
        <td class="sapTbvCellStd" width="2%">
          &nbsp;
        </td>      
        <td class="sapTbvCellStd" colspan="2" width="99%">
           <%=htmlenc(rules[nr])%>
        </td>
      </tr>
<%      } 
      }
%>           
  
    </table>
    <br>
<% }    %>
    <table border=0 cellspacing=1 cellpadding=0 class="sapTbvAlt" width="100%">
      <form action="" name="sortForm" method="GET">
      <input type="hidden" name="hdlsel" value="<%=hdlsel%>">
      <input type="hidden" name="dir" value="">
      <input type="hidden" name="sstr" value="">
      <tr>
        <td class="sapTbvCellAlt" colspan="7"><i><b>Access Filter</b></i></td>
        <td class="sapTbvCellAlt" align="right"><nobr>
          <a accesskey="r" onKeyUp="javascript:callUrlWithKey(event,82,'./confirm.icp?what=reload_perm&amp;hdlsel=<%=hdlsel%>')" 
             href="./confirm.icp?what=reload_perm&amp;hdlsel=<%=hdlsel%>" class="sapBtnEmph"><u>R</u>eload File</a>
          </nobr>
        </td>
      </tr>

      <tr>
	<th align="left" class="sapTbvCellAlt">
	    <i>Index</i>
	</th>

<%
        max = arraylen(sort_tab);
	for (i=0;i < max;i++) {
%>
	  <th align="left" class="sapTbvCellAlt"><nobr>
	    <i><%=sort_tab[i].header%></i>
	    <a href="javascript:callSubmitAction('<%=sort_tab[i].dir%>','<%=sort_tab[i].ffield%>')" class="sapBtnStd:link"><img src="<%=sort_tab[i].url%>" title="<%=sort_tab[i].tool%>" alt="" border="0"></a></nobr>
	  </th>
<%
	}
%>
      </tr>
<%
max = arraylen(icm_perm_tab);
for (nr = 0; nr < max; nr++) {
	prefix = "";
	if (icm_perm_tab[nr].flags & 4)
	  prefix = "*" + icm_perm_tab[nr].prefix;
	else if (!(icm_perm_tab[nr].flags & 8))
	  prefix = icm_perm_tab[nr].prefix + "*";
	else
	  prefix = icm_perm_tab[nr].prefix;
%>
      <tr>
        <td class="sapTbvCellStd"><%=icm_perm_tab[nr].no%></td>
        <td class="sapTbvCellStd"><%=icm_perm_tab[nr].perm%></td>
        <td class="sapTbvCellStd"><%=prefix%></td>
        <td class="sapTbvCellStd"><%=icm_perm_tab[nr].logon_group%></td>
        <td class="sapTbvCellStd"><%=icm_perm_tab[nr].user%></td>
        <td class="sapTbvCellStd"><%=icm_perm_tab[nr].group%></td>
        <td class="sapTbvCellStd"><%=icm_perm_tab[nr].clientip%></td>
        <td class="sapTbvCellStd"><%=icm_perm_tab[nr].serverip%></td>
      </tr>
<%
}
%>
      </form>
    </table>
    <br>
    <table border=0 cellspacing=1 cellpadding=0 class="sapTbvAlt" width="100%">
      <tr>
        <td class="sapTbvCellAlt" Colspan=5>
	  <b><i>Users in file <%=icm_auth_status.auth_file%></i></b>
        </td>
        <td class="sapTbvCellAlt" align="right">
<%
	if (is_admin && (icm_auth_status.auth_file != "")) {
%>
	  <a accesskey="e" onKeyUp="javascript:callUrlWithKey(event,69,'./user_admin.icp?afile=auth&amp;hdlsel=<%=hdlsel%>')" 
	     href="./user_admin.icp?afile=auth&amp;hdlsel=<%=hdlsel%>" class="sapBtnEmph" title="change/add/del user"><u>E</u>dit Users</a>
<% } else __output("&nbsp;"); %>
        </td>
      </tr>
      <tr>
        <th align="left" class="sapTbvCellAlt">
          <i>&nbsp;</i>
        </th>
        <th align="left" class="sapTbvCellAlt">
          <i>Name</i>
        </th>
        <th align="left" class="sapTbvCellAlt">
          <i>Group</i>
        </th>
        <th align="left" class="sapTbvCellAlt" width="600">
          <i>Client Certificate Data</i>
        </th>
        <th align="left" class="sapTbvCellAlt" width="80">
          <i>Password</i>
        </th>
        <th align="left" class="sapTbvCellAlt" width="50">
          <i>Attributes</i>
        </th>
      </tr>
<%
	for (nr = 0; nr < user_count; nr++) {
%>
      <tr>
	<td class="sapTbvCellStd" nowrap align=left width=2><%=nr%></td>
        <td class="sapTbvCellStd"><%=icm_user_info[nr].user%></td>
        <td class="sapTbvCellStd"><%=icm_user_info[nr].group%></td>
        <td class="sapTbvCellStd"><%=icm_user_info[nr].cert%></td>
        <td class="sapTbvCellStd">set</td>
        <td class="sapTbvCellStd">
<%
          if (icm_user_info[nr].locked)
	    __output("<img src=\"../public/icons/s_s_locl.gif\" alt=\"value fixed\">");
	  else
	    __output("&nbsp;");
%>
	</td>
      </tr>
<%
	}
%>

    </table>
  </body>
</html>