1/*
2 * Copyright (C) 2007 Apple Inc.  All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25#ifndef Credential_h
26#define Credential_h
27
28#include "PlatformString.h"
29
30#define CERTIFICATE_CREDENTIALS_SUPPORTED ((PLATFORM(MAC) || PLATFORM(IOS)) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD))
31
32#if CERTIFICATE_CREDENTIALS_SUPPORTED
33#include <Security/SecBase.h>
34#include <wtf/RetainPtr.h>
35#endif
36
37namespace WebCore {
38
39enum CredentialPersistence {
40    CredentialPersistenceNone,
41    CredentialPersistenceForSession,
42    CredentialPersistencePermanent
43};
44
45#if CERTIFICATE_CREDENTIALS_SUPPORTED
46enum CredentialType {
47    CredentialTypePassword,
48    CredentialTypeClientCertificate
49};
50#endif
51
52class Credential {
53
54public:
55    Credential();
56    Credential(const String& user, const String& password, CredentialPersistence);
57    Credential(const Credential& original, CredentialPersistence);
58#if CERTIFICATE_CREDENTIALS_SUPPORTED
59    Credential(SecIdentityRef identity, CFArrayRef certificates, CredentialPersistence);
60#endif
61
62    bool isEmpty() const;
63
64    const String& user() const;
65    const String& password() const;
66    bool hasPassword() const;
67    CredentialPersistence persistence() const;
68
69#if CERTIFICATE_CREDENTIALS_SUPPORTED
70    SecIdentityRef identity() const;
71    CFArrayRef certificates() const;
72    CredentialType type() const;
73#endif
74
75private:
76    String m_user;
77    String m_password;
78    CredentialPersistence m_persistence;
79#if CERTIFICATE_CREDENTIALS_SUPPORTED
80    RetainPtr<SecIdentityRef> m_identity;
81    RetainPtr<CFArrayRef> m_certificates;
82    CredentialType m_type;
83#endif
84};
85
86bool operator==(const Credential& a, const Credential& b);
87inline bool operator!=(const Credential& a, const Credential& b) { return !(a == b); }
88
89};
90#endif
91