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)