ftp_auth_cache.h revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_FTP_FTP_AUTH_CACHE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_FTP_FTP_AUTH_CACHE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <list>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/auth.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_export.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "url/gurl.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The FtpAuthCache class is a simple cache structure to store authentication
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// information for ftp. Provides lookup, insertion, and deletion of entries.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The parameter for doing lookups, insertions, and deletions is a GURL of the
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// server's address (not a full URL with path, since FTP auth isn't per path).
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For example:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   GURL("ftp://myserver") -- OK (implied port of 21)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   GURL("ftp://myserver:21") -- OK
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   GURL("ftp://myserver/PATH") -- WRONG, paths not allowed
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NET_EXPORT_PRIVATE FtpAuthCache {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Maximum number of entries we allow in the cache.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const size_t kMaxEntries;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct Entry {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Entry(const GURL& origin, const AuthCredentials& credentials);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~Entry();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    GURL origin;
34b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    AuthCredentials credentials;
35b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  };
36b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
37b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  FtpAuthCache();
38b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  ~FtpAuthCache();
39b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return Entry corresponding to given |origin| or NULL if not found.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Entry* Lookup(const GURL& origin);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add an entry for |origin| to the cache using |credentials|. If there is
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // already an entry for |origin|, it will be overwritten.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Add(const GURL& origin, const AuthCredentials& credentials);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove the entry for |origin| from the cache, if one exists and matches
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |credentials|.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Remove(const GURL& origin, const AuthCredentials& credentials);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::list<Entry> EntryList;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
54b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // Internal representation of cache, an STL list. This makes lookups O(n),
55b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // but we expect n to be very low.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EntryList entries_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace net
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // NET_FTP_FTP_AUTH_CACHE_H_
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)