1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
38
  
39
  
40
  
41
  
42
  
43
  
44
  
45
  
46
  
47
  
48
  
49
  
50
  
51
  
52
  
53
  
54
  
55
  
56
  
57
  
58
  
59
  
60
  
61
  
62
  
63
  
64
  
65
  
66
  
67
  
68
  
69
  
70
  
71
  
72
  
73
  
74
  
75
  
76
  
77
  
78
  
79
  
80
  
81
  
82
  
83
  
84
  
85
  
86
  
87
  
88
  
89
  
90
  
91
  
92
  
93
  
94
  
/* This is a roxen module. Copyright © 1996 - 1998, Idonex AB. 
 * 
 * Adds some java script that will prevent others from putting 
 * your page in a frame. 
 *  
 * Will also remove occuranses of "index.html" at the end of the URL. 
 *  
 * made by Peter Bortas <peter@idonex.se> Januari -97 
 * 
 * Thanks to  
 */ 
 
constant cvs_version = "$Id: killframe.pike,v 1.15 1998/04/03 19:03:53 peter Exp $"; 
constant thread_safe=1; 
 
#include <module.h> 
inherit "module"; 
 
void create() 
{ 
  defvar( "killindex", 1, "Kill trailing 'indexfiles'?", TYPE_FLAG|VAR_MORE, 
          "When set, the killframes module will remove occurances of " 
          "'indexfiles' (as set in the active directory module) from " 
          "the end of the URL, leaving only a slash." ); 
} 
 
mixed *register_module() 
{ 
  return ({  
    MODULE_PARSER, 
    "Killframe tag", 
      ("Makes pages frameproof." 
       "<br>This module defines a tag," 
       "<pre>" 
       "&lt;killframe&gt;: Adds some java script that will prevent others\n" 
       "             from putting your page in a frame.\n\n" 
       "             Will also strip any occurences of the string\n" 
       "             'index.html' from the end of the URL." 
       "</pre>" 
       ), ({}), 1, 
    }); 
} 
 
string tag_killframe( string tag, mapping m, object id ) 
{ 
  string javascript; 
 
  if(m->help) return register_module()[2]; 
 
  array indexfiles; 
  if( id->conf->dir_module ) 
    indexfiles = id->conf->dir_module->query("indexfiles"); 
 
  while( id->misc->orig ) 
    id = id->misc->orig; 
   
  if( query("killindex") ) 
  { 
    string tmp; 
 
    /* Links to index.html are ugly. */ 
 
    string my_url = id->conf->query("MyWorldLocation"); 
    if( sscanf(my_url, "%s:80/", tmp ) ) 
      my_url = tmp +"/"+ id->not_query[1..]; 
    else 
      my_url += id->not_query[1..]; 
 
    int l=strlen(my_url)-1; 
 
    foreach( indexfiles, string index ) 
      if( my_url[l-strlen(index)..] == "/" +index ) 
        my_url = my_url[..l-strlen(index)]; 
 
    javascript = ( "   if(top.location != \""+ my_url  +"\")\n" 
                   "     top.location = \""+ my_url  +"\";\n"   ); 
  } 
  else 
    javascript = ( "   if (self != top) top.location = self.location;\n" ); 
 
  if (id->supports->javascript) 
    return("<script language=javascript><!--\n" 
           + javascript 
           + "//--></script>\n"); 
 
  return ""; 
} 
 
mapping query_tag_callers() 
{ 
  return ([ "killframe" : tag_killframe ]); 
}