summaryrefslogtreecommitdiffstats
path: root/module/plugins/AccountManager.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/AccountManager.py')
-rw-r--r--module/plugins/AccountManager.py152
1 files changed, 75 insertions, 77 deletions
diff --git a/module/plugins/AccountManager.py b/module/plugins/AccountManager.py
index 3cb14403a..fc521d36c 100644
--- a/module/plugins/AccountManager.py
+++ b/module/plugins/AccountManager.py
@@ -1,4 +1,21 @@
+#!/usr/bin/env python
# -*- coding: utf-8 -*-
+"""
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License,
+ or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+
+ @author: RaNaN
+"""
from os.path import exists
from shutil import copy
@@ -10,11 +27,9 @@ from module.utils import chmod, lock
ACC_VERSION = 1
-
class AccountManager():
"""manages all accounts"""
-
#----------------------------------------------------------------------
def __init__(self, core):
"""Constructor"""
@@ -25,7 +40,6 @@ class AccountManager():
self.initPlugins()
self.saveAccounts() # save to add categories to conf
-
def initPlugins(self):
self.accounts = {} # key = ( plugin )
self.plugins = {}
@@ -36,110 +50,97 @@ class AccountManager():
def getAccountPlugin(self, plugin):
"""get account instance for plugin or None if anonymous"""
- try:
- if plugin in self.accounts:
- if plugin not in self.plugins:
- klass = self.core.pluginManager.loadClass("accounts", plugin)
- if klass:
- self.plugins[plugin] = klass(self, self.accounts[plugin])
- else:
- raise
-
- return self.plugins[plugin]
- else:
- raise
- except:
- return None
+ if plugin in self.accounts:
+ if plugin not in self.plugins:
+ self.plugins[plugin] = self.core.pluginManager.loadClass("accounts", plugin)(self, self.accounts[plugin])
+ return self.plugins[plugin]
+ else:
+ return None
def getAccountPlugins(self):
""" get all account instances"""
-
+
plugins = []
for plugin in self.accounts.keys():
plugins.append(self.getAccountPlugin(plugin))
-
+
return plugins
-
-
#----------------------------------------------------------------------
def loadAccounts(self):
"""loads all accounts available"""
-
- try:
- with open("accounts.conf", "a+") as f:
- content = f.readlines()
- version = content[0].split(":")[1].strip() if content else ""
-
- if not version or int(version) < ACC_VERSION:
- copy("accounts.conf", "accounts.backup")
- f.seek(0)
- f.write("version: " + str(ACC_VERSION))
-
- self.core.log.warning(_("Account settings deleted, due to new config format"))
- return
-
- except IOError, e:
- self.logError(e)
+
+ if not exists("accounts.conf"):
+ f = open("accounts.conf", "wb")
+ f.write("version: " + str(ACC_VERSION))
+ f.close()
+
+ f = open("accounts.conf", "rb")
+ content = f.readlines()
+ version = content[0].split(":")[1].strip() if content else ""
+ f.close()
+
+ if not version or int(version) < ACC_VERSION:
+ copy("accounts.conf", "accounts.backup")
+ f = open("accounts.conf", "wb")
+ f.write("version: " + str(ACC_VERSION))
+ f.close()
+ self.core.log.warning(_("Account settings deleted, due to new config format."))
return
-
+
+
+
plugin = ""
name = ""
-
+
for line in content[1:]:
line = line.strip()
-
+
if not line: continue
if line.startswith("#"): continue
if line.startswith("version"): continue
-
+
if line.endswith(":") and line.count(":") == 1:
plugin = line[:-1]
self.accounts[plugin] = {}
-
+
elif line.startswith("@"):
try:
option = line[1:].split()
- self.accounts[plugin][name]['options'][option[0]] = [] if len(option) < 2 else ([option[1]] if len(option) < 3 else option[1:])
+ self.accounts[plugin][name]["options"][option[0]] = [] if len(option) < 2 else ([option[1]] if len(option) < 3 else option[1:])
except:
pass
-
+
elif ":" in line:
name, sep, pw = line.partition(":")
self.accounts[plugin][name] = {"password": pw, "options": {}, "valid": True}
-
-
#----------------------------------------------------------------------
def saveAccounts(self):
"""save all account information"""
-
- try:
- with open("accounts.conf", "wb") as f:
- f.write("version: " + str(ACC_VERSION) + "\n")
-
- for plugin, accounts in self.accounts.iteritems():
- f.write("\n")
- f.write(plugin+":\n")
-
- for name,data in accounts.iteritems():
- f.write("\n\t%s:%s\n" % (name,data['password']) )
- if data['options']:
- for option, values in data['options'].iteritems():
- f.write("\t@%s %s\n" % (option, " ".join(values)))
-
- chmod(f.name, 0600)
-
- except Exception, e:
- self.logError(e)
-
-
+
+ f = open("accounts.conf", "wb")
+ f.write("version: " + str(ACC_VERSION) + "\n")
+
+ for plugin, accounts in self.accounts.iteritems():
+ f.write("\n")
+ f.write(plugin+":\n")
+
+ for name,data in accounts.iteritems():
+ f.write("\n\t%s:%s\n" % (name,data["password"]) )
+ if data["options"]:
+ for option, values in data["options"].iteritems():
+ f.write("\t@%s %s\n" % (option, " ".join(values)))
+
+ f.close()
+ chmod(f.name, 0600)
+
+
#----------------------------------------------------------------------
def initAccountPlugins(self):
"""init names"""
for name in self.core.pluginManager.getAccountPlugins():
self.accounts[name] = {}
-
-
+
@lock
def updateAccount(self, plugin , user, password=None, options={}):
"""add or update account"""
@@ -147,22 +148,20 @@ class AccountManager():
p = self.getAccountPlugin(plugin)
updated = p.updateAccounts(user, password, options)
#since accounts is a ref in plugin self.accounts doesnt need to be updated here
-
+
self.saveAccounts()
if updated: p.scheduleRefresh(user, force=False)
-
-
+
@lock
def removeAccount(self, plugin, user):
"""remove account"""
-
+
if plugin in self.accounts:
p = self.getAccountPlugin(plugin)
p.removeAccount(user)
self.saveAccounts()
-
@lock
def getAccountInfos(self, force=True, refresh=False):
data = {}
@@ -170,7 +169,7 @@ class AccountManager():
if refresh:
self.core.scheduler.addJob(0, self.core.accountManager.getAccountInfos)
force = False
-
+
for p in self.accounts.keys():
if self.accounts[p]:
p = self.getAccountPlugin(p)
@@ -180,8 +179,7 @@ class AccountManager():
e = AccountUpdateEvent()
self.core.pullManager.addEvent(e)
return data
-
-
+
def sendChange(self):
e = AccountUpdateEvent()
self.core.pullManager.addEvent(e)