X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=cgi-auth-flexible.git;a=blobdiff_plain;f=caf.pod;h=ef649825f16e71e4379d0bd6b79918e1d9ee1259;hp=922f7f8c0eb79fefeb56393e0525ffb95cda3ee4;hb=7ca0f9784810412473315d817af72e605bcd9d28;hpb=13075e27d727e241343ec8a5bd96ee9d8f6e69f4
diff --git a/caf.pod b/caf.pod
index 922f7f8..ef64982 100644
--- a/caf.pod
+++ b/caf.pod
@@ -139,9 +139,8 @@ If you want to handle the control flow and to generate login forms,
redirections, etc., yourself, you can say
C<< $divert = $request->check_divert >>. This returns undef if
the user is logged in, or I if some kind of login
-page or diversion should be generated.
-
-xxx see below
+page or diversion should be generated. See L below for
+details of how to deal with the return value.
=head2 MUTATING OPERATIONS AND EXTERNAL LINKS
@@ -233,6 +232,12 @@ will die, stopping the attack.
(You do not need to call C for POST requests, but it is
harmless to do so.)
+=head3 Mutation-aware applications - novel kinds of request
+
+If you want to support a kind of request perhaps not yet known about
+by CGI::Auth::Flexible, you can provide information about that new
+request kind using C.
+
=head2 DATA STORAGE
CGI::Auth::Flexible needs to store various information in plain files;
@@ -349,7 +354,7 @@ Discards the resources (open files, etc.) in the verifier object.
=back
-=head REQUEST-HANDLING FUNCTIONS AND METHODS
+=head REQUEST-RELATED FUNCTIONS AND METHODS
All of these are only valid after C or C has
been called. (In the case of C it won't normally be sensible
@@ -364,6 +369,37 @@ Returns the value previously returned by C.
Returns the name of the logged-in user. If the user was not logged
in (or their session had timed out, or something), returns undef.
+=item C<< $authreq->check_mutate() >>
+
+Declares to CGI::Auth::Generic that the request being handled will
+"mutate". That is, it will modify some server-side state (eg, adding
+items to shopping baskets, posting messages to blogs, sending emails,
+or whatever).
+
+If you have set the setting C you must call
+C whenever appropriate. If you haven't then it's
+irrelevant. See L.
+
+C will either return successfully, indicating that all
+is well and the request should proceed, or it will die. If it dies
+that means that the request was improper, which can only result from a
+bug or an attack. So an "internal server error" is a suitable
+response.
+
+=item C<< $authreq->check_nonpage($method, $reqtype) >>
+
+Declares to CGI::Auth::Generic that the request is not a page request,
+but rather a request of type I<$reqtype>.
+
+If your application has set the setting C,
+whenever it is handling anything except an HTML page loads, it must
+call this function. See L, and
+L.
+
+C will either return successfully, indicating that all
+is well and the request should proceed, or it will die, like
+C.
+
=head RESPONSE-RELATED FUNCTIONS AND METHODS
=item C<< $authreq->url_with_query_params($params, [$nonpagetype]) >>
@@ -383,6 +419,35 @@ with name C<< '' >> is supplied, it is taken as the PATH_INFO - its
value will be appended to the application path. (It should normally
start with C<< / >>, and only one value should be supplied.)
+=item C<< something->need_add_hidden($method, $reqtype) >>
+
+Enquires whether a request of type I<$reqtype> using HTTP method
+I<$method> needs the hidden form parameter. See L.
+
+=item C<< something->secret_hidden_val() >>
+
+Returns the value of the hidden form parameter. This should be
+included in all POST requests to your application (and thus be a
+hidden form parameter in all forms).
+
+It should also be in some (maybe all) GET requests. If your
+application is mutation-ignorant, it should be in all GET requests.
+If you are mutation-aware, you need to consult C.
+
+The name of the hidden parameter is the setting C,
+C by default. xxx rename param and setting
+
+=item C<< something->secret_hidden_html() >>
+
+Returns the HTML for an C element specifying the hidden form
+parameter.
+
+=item C<< something->secret_cookie_val() >>
+
+Returns the value of the secret cookie. CGI::Auth::Flexible sets this
+cookie in the forms generated by C. You may also set it
+yourself (and indeed you must do so if you use C).
+
=item C<< $authreq->chain_params() >>
Returns a hash of the "relevant" parameters to this request, in a form
@@ -390,4 +455,58 @@ used by XXX. This is all of the query parameters which are not
related to CGI::Auth::Flexible. The PATH_INFO from the request is
returned as the parameter C<< '' >>.
+xxx why use this function
+
+=back
+
+=head OTHER FUNCTIONS AND METHODS
+
+=over
+
+=item C<< $verifier_or_authreq->hash($data) >>
+
+Hashes the supplied data using the hash function specified by the
+C setting, and converts the result to a string of hex
+digits.
+
+=item C<< something->update_get_need_add_hidden($reqtype, $value, [$force]) >>
+
+Updates CGI::Auth::Generic's knowledge about the various kinds of
+request, and whether they need the hidden form parameter. This
+function applies only to GET requests - POST requests always use the
+parameter.
+
+I<$reqtype> is the request type (the value which will be passed to
+C and C. If you are supporting a new
+I<$reqtype> you shouuld coordinate with CGI::Auth::Flexible upstrea,
+or other users, to assign a unique request type name.
+
+This method may be called on an authreq or a verifier, in which case
+it will affect all authreqs using the same verifier. Or it may be
+called on the class as a whole, in which case it will affect the
+global default list for all verifiers.
+
+If I<$force> is supplied and true, this will override
+CGI::Auth::Flexible's existing knowledge. Otherwise this new setting
+will be ignored if CGI::Auth::Flexible already knows about the request
+type. (When called on a verifier or authreq, it will ignore the
+update in favour of existing knowledge recorded both globally in the
+class or due to previous requests on the same verifier.)
+
+See L.
+
+=item C<< $verifier_or_authreq->($data) | CGI::Auth::Flexible->>>
+
+Hashes the supplied data using the hash function specified by the
+C setting, and converts the result to a string of hex
+digits.
+
=back
+
+
+
+xxx divert spec
+xxx reqtype
+xxx settings
+xxx html generators
+xxx document cookie