~robru/friends/early-dbus-interface

« back to all changes in this revision

Viewing changes to friends/utils/authentication.py

  • Committer: Ken VanDine
  • Date: 2012-10-13 01:27:15 UTC
  • Revision ID: ken.vandine@canonical.com-20121013012715-gxfoi1oo30wdm8dv
initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# friends-service -- send & receive messages from any social network
 
2
# Copyright (C) 2012  Canonical Ltd
 
3
#
 
4
# This program is free software: you can redistribute it and/or modify
 
5
# it under the terms of the GNU General Public License as published by
 
6
# the Free Software Foundation, version 3 of the License.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
15
 
 
16
"""Authentication through the single-sign-on service."""
 
17
 
 
18
__all__ = [
 
19
    'Authentication',
 
20
    ]
 
21
 
 
22
 
 
23
import logging
 
24
 
 
25
from gi.repository import GObject, Signon
 
26
GObject.threads_init(None)
 
27
 
 
28
 
 
29
class Authentication:
 
30
    def __init__(self, account, log=None):
 
31
        self.account = account
 
32
        self.log = (logging.getLogger('friends.service')
 
33
                    if log is None
 
34
                    else log)
 
35
        self._reply = None
 
36
        self._authenticating = False
 
37
 
 
38
    def login(self):
 
39
        auth = self.account.auth
 
40
        self.auth_session = Signon.AuthSession.new(auth.id, auth.method)
 
41
        self._authenticating = True
 
42
        self._loop = GObject.MainLoop()
 
43
        self.auth_session.process(
 
44
            auth.parameters, auth.mechanism,
 
45
            self._login_cb, None)
 
46
        if self._authenticating:
 
47
            self._loop.run()
 
48
        return self._reply
 
49
 
 
50
    def _login_cb(self, session, reply, error, user_data):
 
51
        self._authenticating = False
 
52
        if error:
 
53
            self.log.error('Got authentication error: {}', error.message)
 
54
        else:
 
55
            self._reply = reply
 
56
        self.log.debug('Login completed')
 
57
        self._loop.quit()