if not con.authorized and not (cmdname=='linp' or cmdname=='linc'):
raise BailOut
# TODO: log unauthorized access
- if cmdname in cmdlist:
- cmdlist[cmdname](con, cmd[5:])
+ if cmdname in cmdlist_noargs:
+ if len(cmd)==4:
+ cmdlist_noargs[cmdname](con)
+ else:
+ pass
+ # TODO: log malicious msg
+ elif cmdname in cmdlist_args:
+ if len(cmd)>5:
+ cmdlist_args[cmdname](con, cmd[5:])
+ else:
+ pass
+ # TODO: log malicious msg
else:
raise BailOut
# TODO: log this
def cmd_name(con, name):
con.name=name
-cmdlist={'lcks':cmd_lock_soft, 'lckh':cmd_lock_hard, 'ulck':cmd_unlock,
- 'log1':cmd_log, 'name':cmd_name}
+def cmd_login_passwd(con, data):
+ tmp=data.split('\n')
+ if len(tmp)!=2:
+ raise BailOut
+ login=tmp[0]
+ passwd=tmp[1]
+ if login=='mmazur' and passwd=='ziew':
+ con.sock.send('OK ciasteczko')
+ else:
+ # TODO: log this
+ con.sock.send('FAIL')
+ raise BailOut
+
+def cmd_login_cookie(con, cookie):
+ if cookie=='ciasteczko':
+ con.sock.send('OK mmazur')
+ else:
+ # TODO: log this (or not)
+ con.sock.send('FAIL')
+
+def cmd_logout(con):
+ # TODO: remove cookie
+ pass
+
+cmdlist_args={'lcks':cmd_lock_soft, 'lckh':cmd_lock_hard, 'ulck':cmd_unlock,
+ 'log1':cmd_log, 'name':cmd_name, 'linp':cmd_login_passwd,
+ 'linc':cmd_login_cookie}
+
+cmdlist_noargs={'lout':cmd_logout}
+
# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
-import Cookie, time, md5
+import Cookie, time, ftpio
UserNotLoggedIn="UserNotLoggedIn"
class User:
def __init__(self, cookies, options):
self.loggedin=False
- if (cookies.has_key('ftpsessid') and
- self.checksession(cookies['ftpsessid'])):
- self.loggedin=True
+ ftpio.connect()
+ if 'ftpsessid' in cookies and cookies['ftpsessid']:
+ self.login=ftpio.login_cookie(cookies['ftpsessid'])
+ if self.login:
+ self.loggedin=True
- if options.has_key('action'):
+ if 'action' in options:
if options['action'] == 'register':
self.checkloginpass(options)
elif options['action'] == 'logout':
self.logout()
def checkloginpass(self, options):
- if not options.has_key('login') or not options.has_key('pass'):
+ if 'login' not in options or 'pass' not in options:
return
- f=open('../../passwd', 'r')
- for line in f.readlines():
- list=line.strip().split(':')
- if (list[0]==options['login'] and
- list[1]==md5.new(options['pass']).hexdigest()):
- self.loggedin=True
- self.login=list[0]
- C = Cookie.SimpleCookie()
- cookiestring=md5.new(list[0]+`time.time()`).hexdigest()
- C['ftpsessid']=cookiestring
- #C['ftpsessid']['expires']=time.strftime(
- #"%a, %d-%b-%y %H:%M:%S GMT",
- #time.gmtime(time.time()+86400))
- print C
- break
- f.close()
- if self.loggedin:
- cookies=self.loadcookies()
- cookies[cookiestring]=options['login']
- self.writecookies(cookies)
-
- def checksession(self, ftpsessid):
- cookies=self.loadcookies()
- if cookies.has_key(ftpsessid):
- self.login=cookies[ftpsessid]
- self.ftpsessid=ftpsessid
- return True
-
- def loadcookies(self):
- f=open('../../cookies', 'r')
- cookies={}
- for line in f.readlines():
- list=line.strip().split(':')
- cookies[list[0]]=list[1]
- f.close()
- return cookies
-
- def writecookies(self, cookies):
- f=open('../../cookies', 'w+')
- for key in cookies.keys():
- f.write("%s:%s\n" % (key, cookies[key]))
- f.close()
-
- def logout(self):
- if self.loggedin:
- cookies=self.loadcookies()
- if cookies.has_key(self.ftpsessid):
- del cookies[self.ftpsessid]
- self.writecookies(cookies)
-
- self.loggedin=False
-
+ self.cookie=ftpio.login_passwd(options['login'], options['pass'])
+ if self.cookie:
+ self.login=options['login']
+ self.loggedin=True
C = Cookie.SimpleCookie()
- C['ftpsessid']=''
- C['ftpsessid']['expires']=time.strftime("%a, %d-%b-%y %H:%M:%S GMT",
- time.gmtime(time.time()-31536000))
+ C['ftpsessid']=self.cookie
+ #C['ftpsessid']['expires']=time.strftime(
+ #"%a, %d-%b-%y %H:%M:%S GMT",
+ #time.gmtime(time.time()+86400))
print C
+
+ def logout(self):
+ self.loggedin=False
+ ftpio.logout()
+ C = Cookie.SimpleCookie()
+ C['ftpsessid']=''
+ C['ftpsessid']['expires']=time.strftime("%a, %d-%b-%y %H:%M:%S GMT",
+ time.gmtime(time.time()-31536000))
+ print C