xpra icon
Bug tracker and wiki

Ticket #1488: sql_auth.py

File sql_auth.py, 3.7 KB (added by Denis01, 3 years ago)
Line 
1# This file is part of Xpra.
2# Copyright (C) 2013-2017 Antoine Martin <antoine@devloop.org.uk>
3# Xpra is released under the terms of the GNU GPL v2, or, at your option, any
4# later version. See the file COPYING for details.
5
6import sys
7import os
8import binascii
9import hmac
10import sqlite3
11import os
12import paramiko
13import socket
14import time 
15
16from xpra.server.auth.sys_auth_base import SysAuthenticator, init, log
17assert init and log #tests will disable logging from here
18
19from xpra.os_util import strtobytes
20from xpra.util import xor, parse_simple_dict
21from xpra.net.crypto import get_digest_module
22
23
24class Authenticator(SysAuthenticator):
25    def __init__(self, username, **kwargs):
26                SysAuthenticator.__init__(self, username)
27                self.db_name = kwargs.get("db_name", "/root/xpra.sdb")
28                self.password_query = kwargs.get("password_query", "SELECT password FROM users WHERE username=(?)")
29                self.sessions_query = kwargs.get("sessions_query", "SELECT .. ")
30                self.authenticate = self.authenticate_hmac
31                self.sessions = None
32
33    def get_password(self):
34
35                #check if file with DB exists
36                if os.path.exists(self.db_name): 
37                        log("LB. Database found: '%s'", self.db_name)
38                else: 
39                        log.error("LB. No database: '%s'", self.db_name)
40                        return 
41                conn = sqlite3.connect(self.db_name)
42                cursor = conn.cursor()
43       
44                try:
45                        cursor.execute("select * from users where user_ipn=(?)", ([self.username]))
46                        data=cursor.fetchone()
47                except sqlite3.DatabaseError as err:       
48                        log.error("LB. DB problem:'%s'", err)
49                        return
50                else:
51                        conn.commit()
52                if data:
53                        entry=str(data[2])                      #return password converted from unicode DB
54                        return entry
55                else:                                                   #No username in DB
56                        return None
57
58    def get_sessions(self):
59                       
60                        ip_serv_1="151.248.112.232"
61                        host_secret="111"
62                        user_id="111"
63                        comm_string="xpra start --bind-tcp=151.248.112.232:10000 --start-child=/bin/gedit --exit-with-children --auth=allow"
64
65                        log.error("SESSION START '%s'", self.username)
66                        print(host_secret, user_id, comm_string)
67                        client = paramiko.SSHClient()
68                        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
69                        client.connect(hostname=ip_serv_1, username=user_id, password=host_secret, port=22)
70                        stdin, stdout, stderr = client.exec_command(comm_string)
71                        data = stdout.read() + stderr.read()
72                        print (data)
73                       
74                        client.close()                 
75                       
76                        print("TIME TO SLEEP!!!!")
77                        time.sleep(3)
78                       
79                        #client = paramiko.SSHClient()
80                        #client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
81                        #client.connect(hostname=ip_serv_1, username=user_id, password=host_secret, port=22)                   
82                        #Version="xpra version tcp/151.248.112.232:10000/"             
83                        #stdin, stdout, stderr = client.exec_command(Version)                   
84                        #data = stdout.read() + stderr.read()
85                        #print (data)                   
86                       
87                                               
88                        #client.close()
89                        log.error("AFTER START")               
90
91
92                        #log.error("TIME TO SLEEP")
93                        #time.sleep(20)
94                        self.uid=int(1003)
95                        self.gid=int(1003)
96                        disp_string="tcp:151.248.112.232:10000" #+str(session_res[1])+":"+str(session_res[2])
97                        self.displays=[disp_string]
98                        self.env_options={}
99                        self.session_options={}
100                        self.sessions = self.uid, self.gid, self.displays, self.env_options, self.session_options                                       
101                        return self.sessions
102
103       
104def main():
105     def usage(msg="invalid number of arguments"):
106         print(msg)
107         print("usage: %s create|..." % sys.argv[0])
108         return 1
109     from xpra.platform import program_context
110     with program_context("SQL Auth", "SQL Auth"):
111     
112         if len(sys.argv)!=2:
113            return usage()
114         cmd = sys.argv[1]
115         if cmd=="create":
116                    #create the schema or something
117                    pass
118         else:
119            return usage("invalid command '%s'" % cmd)
120     return 0
121       
122if __name__ == "__main__":
123        r = main()
124        sys.exit(r)
125
126
127