std/cgi
Source Edit
This module implements helper procs for CGI applications. Example:
import std/[strtabs, cgi]
# Fill the values when debugging:
when debug:
setTestData("name", "Klaus", "password", "123456")
# read the data into `myData`
var myData = readData()
# check that the data's variable names are "name" or "password"
validateData(myData, "name", "password")
# start generating content:
writeContentType()
# generate content:
write(stdout, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n")
write(stdout, "<html><head><title>Test</title></head><body>\n")
writeLine(stdout, "your name: " & myData["name"])
writeLine(stdout, "your password: " & myData["password"])
writeLine(stdout, "</body></html>")
Imports
strutils, os, strtabs, cookies, uri
Types
-
CgiError = object of IOError
-
Exception that is raised if a CGI error occurs. Source Edit
-
RequestMethod = enum
methodNone, ## no REQUEST_METHOD environment variable
methodPost, ## query uses the POST method
methodGet ## query uses the GET method
-
The used request method. Source Edit
Procs
-
proc cgiError(msg: string) {.noreturn, ...raises: [CgiError], tags: [], forbids: [].}
-
Raises a
CgiError
exception with message msg
. Source Edit
-
proc existsCookie(name: string): bool {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Checks if a cookie of
name
exists. Source Edit
-
proc getContentLength(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
CONTENT_LENGTH
environment variable. Source Edit
-
proc getContentType(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
CONTENT_TYPE
environment variable. Source Edit
-
proc getCookie(name: string): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Gets a cookie. If no cookie of
name
exists, "" is returned. Source Edit
-
proc getDocumentRoot(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
DOCUMENT_ROOT
environment variable. Source Edit
-
proc getGatewayInterface(): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Returns contents of the
GATEWAY_INTERFACE
environment variable. Source Edit
-
proc getHttpAccept(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
HTTP_ACCEPT
environment variable. Source Edit
-
proc getHttpAcceptCharset(): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Returns contents of the
HTTP_ACCEPT_CHARSET
environment variable. Source Edit
-
proc getHttpAcceptEncoding(): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Returns contents of the
HTTP_ACCEPT_ENCODING
environment variable. Source Edit
-
proc getHttpAcceptLanguage(): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Returns contents of the
HTTP_ACCEPT_LANGUAGE
environment variable. Source Edit
-
proc getHttpConnection(): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Returns contents of the
HTTP_CONNECTION
environment variable. Source Edit
-
proc getHttpCookie(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
HTTP_COOKIE
environment variable. Source Edit
-
proc getHttpHost(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
HTTP_HOST
environment variable. Source Edit
-
proc getHttpReferer(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
HTTP_REFERER
environment variable. Source Edit
-
proc getHttpUserAgent(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
HTTP_USER_AGENT
environment variable. Source Edit
-
proc getPathInfo(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
PATH_INFO
environment variable. Source Edit
-
proc getPathTranslated(): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Returns contents of the
PATH_TRANSLATED
environment variable. Source Edit
-
proc getQueryString(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
QUERY_STRING
environment variable. Source Edit
-
proc getRemoteAddr(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
REMOTE_ADDR
environment variable. Source Edit
-
proc getRemoteHost(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
REMOTE_HOST
environment variable. Source Edit
-
proc getRemoteIdent(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
REMOTE_IDENT
environment variable. Source Edit
-
proc getRemotePort(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
REMOTE_PORT
environment variable. Source Edit
-
proc getRemoteUser(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
REMOTE_USER
environment variable. Source Edit
-
proc getRequestMethod(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
REQUEST_METHOD
environment variable. Source Edit
-
proc getRequestURI(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
REQUEST_URI
environment variable. Source Edit
-
proc getScriptFilename(): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Returns contents of the
SCRIPT_FILENAME
environment variable. Source Edit
-
proc getScriptName(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
SCRIPT_NAME
environment variable. Source Edit
-
proc getServerAddr(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
SERVER_ADDR
environment variable. Source Edit
-
proc getServerAdmin(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
SERVER_ADMIN
environment variable. Source Edit
-
proc getServerName(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
SERVER_NAME
environment variable. Source Edit
-
proc getServerPort(): string {....raises: [], tags: [ReadEnvEffect], forbids: [].}
-
Returns contents of the
SERVER_PORT
environment variable. Source Edit
-
proc getServerProtocol(): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Returns contents of the
SERVER_PROTOCOL
environment variable. Source Edit
-
proc getServerSignature(): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Returns contents of the
SERVER_SIGNATURE
environment variable. Source Edit
-
proc getServerSoftware(): string {....raises: [], tags: [ReadEnvEffect],
forbids: [].}
-
Returns contents of the
SERVER_SOFTWARE
environment variable. Source Edit
-
proc readData(allowedMethods: set[RequestMethod] = {methodNone, methodPost,
methodGet}): StringTableRef {....raises: [CgiError, ValueError, IOError],
tags: [ReadEnvEffect, ReadIOEffect],
forbids: [].}
-
Reads CGI data. If the client does not use a method listed in the
allowedMethods
set, a CgiError
exception is raised. Source Edit
-
proc readData(data: string): StringTableRef {....raises: [], tags: [], forbids: [].}
-
Reads CGI data from a string. Source Edit
-
proc setCookie(name, value: string) {....raises: [IOError], tags: [WriteIOEffect],
forbids: [].}
-
Sets a cookie. Source Edit
-
proc setStackTraceStdout() {....raises: [], tags: [], forbids: [].}
-
Makes Nim output stacktraces to stdout, instead of server log. Source Edit
-
proc setTestData(keysvalues: varargs[string]) {....raises: [OSError],
tags: [WriteEnvEffect], forbids: [].}
-
Fills the appropriate environment variables to test your CGI application. This can only simulate the 'GET' request method. keysvalues
should provide embedded (name, value)-pairs. Example:
setTestData("name", "Hanz", "password", "12345")
Source Edit
-
proc validateData(data: StringTableRef; validKeys: varargs[string]) {.
...raises: [CgiError], tags: [], forbids: [].}
-
Validates data; raises
CgiError
if this fails. This checks that each variable name of the CGI data
occurs in the validKeys
array. Source Edit
-
proc writeContentType() {....raises: [IOError], tags: [WriteIOEffect], forbids: [].}
-
Calls this before starting to send your HTML data to stdout
. This implements this part of the CGI protocol:
write(stdout, "Content-type: text/html\n\n")
Source Edit
-
proc writeErrorMessage(data: string) {....raises: [IOError], tags: [WriteIOEffect],
forbids: [].}
-
Tries to reset browser state and writes
data
to stdout in <plaintext> tag. Source Edit
-
proc xmlEncode(s: string): string {....raises: [], tags: [], forbids: [].}
-
Encodes a value to be XML safe:
"
is replaced by "
<
is replaced by <
>
is replaced by >
&
is replaced by &
- every other character is carried over.
Source Edit
Iterators
-
iterator decodeData(allowedMethods: set[RequestMethod] = {methodNone,
methodPost, methodGet}): tuple[key, value: string] {.
...raises: [CgiError, ValueError, IOError],
tags: [ReadEnvEffect, ReadIOEffect], forbids: [].}
-
Reads and decodes CGI data and yields the (name, value) pairs the data consists of. If the client does not use a method listed in the
allowedMethods
set, a CgiError
exception is raised. Source Edit
-
iterator decodeData(data: string): tuple[key, value: string] {....raises: [],
tags: [], forbids: [].}
-
Reads and decodes CGI data and yields the (name, value) pairs the data consists of. Source Edit
Exports
encodeUrl, decodeUrl