parent $misc
object $file
var $root dbref 'file
var $root child_index 1
var $root fertile 0
var $root manager $file
var $root owned [$file]
var $root owners [$file]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $root inited 1
var $file content_type ""
var $file data 0
var $file header 0
var $file filename "Generic File"
method init_file
(> .perms(caller(), $root) <);
data = 0;
header = 0;
content_type = "text/plain";
.
method uninit_file
(> .perms(caller(), $root) <);
data = 0;
header = 0;
content_type = "text/plain";
.
method set_header
arg new_header;
var type, valid_types;
(> .perms(sender()) <);
if (type(new_header) != 'list)
throw(~type, "Header must be a list of strings.");
header = new_header;
.
method set_data
arg new_data;
var type, valid_types;
(> .perms(sender()) <);
type = type(new_data);
valid_types = ['list, 'buffer];
if (!(type in valid_types))
throw(~type, "Data must be one of: " + ($data.unparse(valid_types)));
data = new_data;
.
method header
if (!('parameter in (.is_readable_by(sender()))))
throw(~perm, ((sender().namef('xref)) + " does not have permission to see parameters on ") + (.namef('xref)));
return header;
.
method content_type
return content_type;
.
method set_content_type
arg type;
(> .perms(sender()) <);
if (type(type) != 'string)
throw(~type, "Content-type must be sent as a string.");
content_type = type;
.
method filename
arg [args];
if (!args)
return filename;
else if ((args[1]) == 'full)
return ((filename + " (") + (.dbref())) + ")";
.
method set_filename
arg fname;
var x;
(> .perms(sender()) <);
if (type(fname) != 'string)
throw(~type, ("Filename for " + (.namef('xref))) + " must be submitted as a string.");
for x in [1 .. strlen(fname)] {
if ((fname[x]) in "!@#$%^&*()+-=~`'{}[]|/?\"\\,<>;: ")
throw(~type, "Filenames cannot contain any of: !@#$%^&*()+-=~`'{}[]|/?\"\\,<>;: ");
}
filename = fname;
.
method find_file
arg path;
var child, found;
if ((!('parameters in (.is_readable_by(sender())))) && (!(sender() in (.parents()))))
throw(~perm, ((sender().dbref()) + " does not have permission to see the filesystem from ") + (.filename()));
if (type(path) != 'list)
path = explode(path, "/");
if (!path)
return 0;
if ((listlen(path) == 1) && ((path[1]) == (.filename())))
return;
for child in (.children()) {
found = child.find_file(sublist(path, 2));
if (found)
return found;
}
return 0;
.
method generate_html
arg [args];
var out;
out = [];
if ('parameters in (.is_readable_by(sender()))) {
out = .data();
if (out && (type(out) != 'buffer))
out = ["<hr width=50% align=center>", ("<center><b>Filename: " + (.filename())) + "</b></center><P>", @out];
}
return (> pass(@args) <) + (out || []);
.
method file_data
if (!('parameters in (.is_readable_by(sender()))))
throw(~perm, ((sender().namef('xref)) + " does not have permission to see parameters on ") + (.namef('xref)));
return data;
.