10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// Copyright (c) 2011 The Chromium Authors. All rights reserved. 20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// Use of this source code is governed by a BSD-style license that can be 30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// found in the LICENSE file. 40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifndef NET_FTP_FTP_AUTH_CACHE_H_ 60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define NET_FTP_FTP_AUTH_CACHE_H_ 70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <list> 90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "net/base/auth.h" 110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "net/base/net_export.h" 120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "url/gurl.h" 130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarnamespace net { 150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// The FtpAuthCache class is a simple cache structure to store authentication 170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// information for ftp. Provides lookup, insertion, and deletion of entries. 180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// The parameter for doing lookups, insertions, and deletions is a GURL of the 190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// server's address (not a full URL with path, since FTP auth isn't per path). 200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// For example: 210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// GURL("ftp://myserver") -- OK (implied port of 21) 220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// GURL("ftp://myserver:21") -- OK 230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// GURL("ftp://myserver/PATH") -- WRONG, paths not allowed 240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarclass NET_EXPORT_PRIVATE FtpAuthCache { 250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar public: 260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Maximum number of entries we allow in the cache. 270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar static const size_t kMaxEntries; 280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar struct Entry { 300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar Entry(const GURL& origin, const AuthCredentials& credentials); 310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ~Entry(); 320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar GURL origin; 340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar AuthCredentials credentials; 350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar }; 360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar FtpAuthCache(); 380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ~FtpAuthCache(); 390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Return Entry corresponding to given |origin| or NULL if not found. 410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar Entry* Lookup(const GURL& origin); 420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Add an entry for |origin| to the cache using |credentials|. If there is 440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // already an entry for |origin|, it will be overwritten. 450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar void Add(const GURL& origin, const AuthCredentials& credentials); 460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Remove the entry for |origin| from the cache, if one exists and matches 480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // |credentials|. 490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar void Remove(const GURL& origin, const AuthCredentials& credentials); 500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar private: 520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar typedef std::list<Entry> EntryList; 530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // Internal representation of cache, an STL list. This makes lookups O(n), 550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // but we expect n to be very low. 560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar EntryList entries_; 570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}; 580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} // namespace net 600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif // NET_FTP_FTP_AUTH_CACHE_H_ 620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar