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