1/*
2 * Copyright (C) 2010 Stephan Aßmus <superstippi@gmx.de>
3 *
4 * All rights reserved. Distributed under the terms of the MIT License.
5 */
6#ifndef CREDENTIAL_STORAGE_H
7#define CREDENTIAL_STORAGE_H
8
9#include "HashKeys.h"
10#include "HashMap.h"
11#include <Locker.h>
12#include <String.h>
13
14
15class BFile;
16class BMessage;
17class BString;
18
19
20class Credentials {
21public:
22								Credentials();
23								Credentials(const BString& username,
24									const BString& password);
25								Credentials(
26									const Credentials& other);
27								Credentials(const BMessage* archive);
28								~Credentials();
29
30			status_t			Archive(BMessage* archive) const;
31
32			Credentials&		operator=(const Credentials& other);
33
34			bool				operator==(const Credentials& other) const;
35			bool				operator!=(const Credentials& other) const;
36
37			const BString&		Username() const;
38			const BString&		Password() const;
39
40private:
41			BString				fUsername;
42			BString				fPassword;
43};
44
45
46class CredentialsStorage : public BLocker {
47public:
48	static	CredentialsStorage*	SessionInstance();
49	static	CredentialsStorage*	PersistentInstance();
50
51			bool				Contains(const HashKeyString& key);
52			status_t			PutCredentials(const HashKeyString& key,
53									const Credentials& credentials);
54			Credentials			GetCredentials(const HashKeyString& key);
55
56private:
57								CredentialsStorage(bool persistent);
58	virtual						~CredentialsStorage();
59
60			void				_LoadSettings();
61			void				_SaveSettings() const;
62			bool				_OpenSettingsFile(BFile& file,
63									uint32 mode) const;
64
65private:
66			typedef HashMap<HashKeyString, Credentials> CredentialMap;
67			CredentialMap		fCredentialMap;
68
69	static	CredentialsStorage	sPersistentInstance;
70	static	CredentialsStorage	sSessionInstance;
71			bool				fSettingsLoaded;
72			bool				fPersistent;
73};
74
75
76#endif // CREDENTIAL_STORAGE_H
77
78