Release 5.2
diff --git a/src/js/account.js b/src/js/account.js
new file mode 100644
index 0000000..d8ddd0d
--- /dev/null
+++ b/src/js/account.js
@@ -0,0 +1,75 @@
+/**
+ * Create a user.
+ * @param {Object} user
+ * properties: id, name, accessToken, expires, accessTokenSecret, albumId
+ */
+var User = function(user) {
+ for (var prop in user) {
+ this[prop] = user[prop];
+ }
+};
+
+var Account = {
+
+ getUsers: function(siteId) {
+ var users = localStorage.getItem(siteId + '_userInfo');
+ if (users) {
+ users = JSON.parse(users);
+ for (var id in users) {
+ // Remove expired user.
+ if (Account.isExpires(users[id])) {
+ delete users[id];
+ }
+ }
+ localStorage.setItem(siteId + '_userInfo', JSON.stringify(users));
+ return users;
+ }
+ return {};
+ },
+
+ getUser: function(siteId, userId) {
+ var users = Account.getUsers(siteId);
+ var user = users[userId];
+ if (user && Account.isExpires(user)) {
+ Account.removeUser(siteId, userId);
+ return null;
+ } else {
+ return user;
+ }
+ },
+
+ addUser: function(siteId, user) {
+ var users = Account.getUsers(siteId);
+ var userId = user.id;
+ if (!users[userId]) {
+ users[userId] = user;
+ users = JSON.stringify(users);
+ localStorage.setItem(siteId + '_userInfo', users);
+ }
+ },
+
+ updateUser: function(siteId, user) {
+ var users = Account.getUsers(siteId);
+ var userId = user.id;
+ if (users && users[userId]) {
+ users[userId] = user;
+ users = JSON.stringify(users);
+ localStorage.setItem(siteId + '_userInfo', users);
+ }
+ },
+
+ removeUser: function(siteId, userId) {
+ var users = Account.getUsers(siteId);
+ delete users[userId];
+ users = JSON.stringify(users);
+ localStorage.setItem(siteId + '_userInfo', users);
+ },
+
+ isExpires: function(user) {
+ var expires = user.expires;
+ if (expires) {
+ return new Date().getTime() >= expires;
+ }
+ return false;
+ }
+};
\ No newline at end of file