xref: /haiku/src/apps/webpositive/CredentialsStorage.h (revision aed35104852941f0f6f3d1dcc5338b5f337d0a3c)
1 /*
2  * Copyright (C) 2010 Stephan Aßmus <superstippi@gmx.de>
3  *
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 #ifndef CREDENTIAL_STORAGE_H
28 #define CREDENTIAL_STORAGE_H
29 
30 #include "HashKeys.h"
31 #include "HashMap.h"
32 #include <Locker.h>
33 #include <String.h>
34 
35 
36 class BFile;
37 class BMessage;
38 class BString;
39 
40 
41 class Credentials {
42 public:
43 								Credentials();
44 								Credentials(const BString& username,
45 									const BString& password);
46 								Credentials(
47 									const Credentials& other);
48 								Credentials(const BMessage* archive);
49 								~Credentials();
50 
51 			status_t			Archive(BMessage* archive) const;
52 
53 			Credentials&		operator=(const Credentials& other);
54 
55 			bool				operator==(const Credentials& other) const;
56 			bool				operator!=(const Credentials& other) const;
57 
58 			const BString&		Username() const;
59 			const BString&		Password() const;
60 
61 private:
62 			BString				fUsername;
63 			BString				fPassword;
64 };
65 
66 
67 class CredentialsStorage : public BLocker {
68 public:
69 	static	CredentialsStorage*	SessionInstance();
70 	static	CredentialsStorage*	PersistentInstance();
71 
72 			bool				Contains(const HashKeyString& key);
73 			status_t			PutCredentials(const HashKeyString& key,
74 									const Credentials& credentials);
75 			Credentials			GetCredentials(const HashKeyString& key);
76 
77 private:
78 								CredentialsStorage(bool persistent);
79 	virtual						~CredentialsStorage();
80 
81 			void				_LoadSettings();
82 			void				_SaveSettings() const;
83 			bool				_OpenSettingsFile(BFile& file,
84 									uint32 mode) const;
85 
86 private:
87 			typedef HashMap<HashKeyString, Credentials> CredentialMap;
88 			CredentialMap		fCredentialMap;
89 
90 	static	CredentialsStorage	sPersistentInstance;
91 	static	CredentialsStorage	sSessionInstance;
92 			bool				fSettingsLoaded;
93 			bool				fPersistent;
94 };
95 
96 
97 #endif // CREDENTIAL_STORAGE_H
98 
99