1 /*
2  * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #ifndef _SQUID_SRC_AUTH_DIGEST_USERREQUEST_H
10 #define _SQUID_SRC_AUTH_DIGEST_USERREQUEST_H
11 
12 #if HAVE_AUTH_MODULE_DIGEST
13 
14 #include "auth/UserRequest.h"
15 
16 class ConnStateData;
17 class HttpReply;
18 class HttpRequest;
19 
20 namespace Auth
21 {
22 namespace Digest
23 {
24 
25 /**
26  * The UserRequest structure is what follows the http_request around
27  */
28 class UserRequest : public Auth::UserRequest
29 {
30     MEMPROXY_CLASS(Auth::Digest::UserRequest);
31 
32 public:
33     UserRequest();
34     virtual ~UserRequest();
35 
36     virtual int authenticated() const;
37     virtual void authenticate(HttpRequest * request, ConnStateData * conn, Http::HdrType type);
38     virtual Direction module_direction();
39     virtual void addAuthenticationInfoHeader(HttpReply * rep, int accel);
40 #if WAITING_FOR_TE
41     virtual void addAuthenticationInfoTrailer(HttpReply * rep, int accel);
42 #endif
43 
44     virtual void startHelperLookup(HttpRequest *request, AccessLogEntry::Pointer &al, AUTHCB *, void *);
45     virtual const char *credentialsStr();
46 
47     char *noncehex;             /* "dcd98b7102dd2f0e8b11d0f600bfb0c093" */
48     char *cnonce;               /* "0a4f113b" */
49     char *realm;                /* = "testrealm@host.com" */
50     char *pszPass;              /* = "Circle Of Life" */
51     char *algorithm;            /* = "md5" */
52     char nc[9];                 /* = "00000001" */
53     char *pszMethod;            /* = "GET" */
54     char *qop;                  /* = "auth" */
55     char *uri;                  /* = "/dir/index.html" */
56     char *response;
57 
58     struct {
59         bool authinfo_sent;
60         bool invalid_password;
61         bool helper_queried;
62     } flags;
63     digest_nonce_h *nonce;
64 
65 private:
66     static HLPCB HandleReply;
67 };
68 
69 } // namespace Digest
70 } // namespace Auth
71 
72 #endif /* HAVE_AUTH_MODULE_DIGEST */
73 #endif /* _SQUID_SRC_AUTH_DIGEST_USERREQUEST_H */
74 
75