-
Notifications
You must be signed in to change notification settings - Fork 267
/
yaws_outmod.erl
103 lines (83 loc) · 2.3 KB
/
yaws_outmod.erl
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
95
96
97
98
99
100
101
102
103
%%%----------------------------------------------------------------------
%%% File : yaws_outmod.erl
%%% Author : Claes Wikstrom <klacke@hyber.org>
%%% Purpose :
%%% Created : 4 Nov 2002 by Claes Wikstrom <klacke@hyber.org>
%%%----------------------------------------------------------------------
-module(yaws_outmod).
-author('klacke@hyber.org').
-include("../include/yaws.hrl").
-include("../include/yaws_api.hrl").
-export([out401/3,
out404/3,
out404/1,
out/1,
crashmsg/3]).
%% The default error 404 error delivery module
%% This function can be used to generate
%% a special page on 404's (it doesn't even have to be a 404)
out404(Arg) ->
out404(Arg, get(gc), get(sc)).
out404(Arg, GC, SC) ->
Req = Arg#arg.req,
{abs_path, Path} = Req#http_request.path,
B = not_found_body(Path, GC, SC),
[{status, 404},
{header, {content_type, "text/html"}},
{header, {connection, "close"}},
{html, B}].
%% The default error 401 error delivery module
%% This function can be used to generate
%% a special page on 401's (it doesn't even have to be a 401)
out401(_Arg, _Auth, _Realm) ->
{ehtml,
[{html,[],
[
{body, [],
[{h1,[], "401 authentication needed"}
]
}
]
}
]
}.
%% Deprecated, out401/3 will be used
out(_Arg) ->
{ehtml,
[{html,[],
[
{body, [],
[{h1,[], "401 authentication needed"}
]
}
]
}
]
}.
not_found_body(Path, _GC, _SC) ->
L = ["<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">"
"<HTML><HEAD>"
"<TITLE>404 Not Found</TITLE>"
"</HEAD><BODY>"
"<H1>Not Found</H1>"
"The requested URL ",
yaws_api:htmlize(Path),
" was not found on this server.<P>"
"<HR>",
yaws:address(),
" </BODY></HTML>"
],
list_to_binary(L).
%% possibility to customize crash messages,
%% while developing
%% it's extremely convenient to get the crash messages in the browser,
%% however not in production :-)
%% This function can only return an {ehtml, EH} or an {html, HTML}
%% value, no status codes, no headers etc.
crashmsg(_Arg, _SC, L) ->
{ehtml,
[{h2, [], "Internal error, yaws code crashed"},
{br},
{hr},
{pre, [], L},
{hr}]}.