def testParseStr(self): result=Discuz.parse_str("a=1&b=2") self.assertEqual(len(result),2) self.assertTrue('a' in result) self.assertTrue('b' in result) self.assertTrue(result['a']=='1') self.assertTrue(result['b']=='2')
def syn_login(self,uid): ''' 同步登录 @param uid ''' #检查是否允许 if settings.API_SYNLOGIN: #获取对应用户 try: user=User.objects.extra(where=['reference_id=%s'],params=[uid])[0] username=user.username except: username='' # from django.contrib.auth import login,get_backends # backend=get_backends()[0] # user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__) # login(self.request,user) resp=HttpResponse() resp['P3P: CP']='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR' value=Discuz.discuzAuthcodeEncode('%s,%s' % (uid,username), settings.API_KEY) resp.set_cookie(settings.UC_COOKIE_KEY, value, 86400*365,86400*365) return resp return HttpResponse(settings.API_RETURN_FORBIDDEN)
def uc_api_input(self,data): postdata =("%s&agent=%s&time=%s" % (data, Discuz.MD5(self.request.META["HTTP_USER_AGENT"]), Discuz.unixTimestamp())) postdata = Discuz.discuzAuthcodeEncode(postdata, settings.API_KEY); return postdata
def testDiscuzAuthcode(self): s= Discuz.discuzAuthcode("123456", "123456", Discuz.ENCODE, 1000) print s self.assertTrue( Discuz.discuzAuthcode(s, '123456', Discuz.DECODE,1000)=="123456") s= Discuz.discuzAuthcode("中文", "中文密码", Discuz.ENCODE, 1000) self.assertTrue( Discuz.discuzAuthcode(s, '中文密码', Discuz.DECODE,1000)=="中文") s= Discuz.discuzAuthcode(u"中文".encode('utf-8'), u"中文密码".encode('utf-8'), Discuz.ENCODE, 1000) self.assertTrue( Discuz.discuzAuthcode(s, u'中文密码'.encode('utf-8'), Discuz.DECODE,1000)==u"中文".encode('utf-8'))
def testParse(self): print Discuz.parse_str(Discuz.discuzAuthcode('9949DdD0eUd4j+HIq8SIR4zDxr02OKaqn2+0D8X0+XDuZNs17mpg7K5xXdTe/qHLBul0p25SD+Q', settings.API_KEY,Discuz.DECODE))
def testUnixTimestamp(self): print Discuz.unixTimestamp()
def testRandomStr(self): self.assertTrue(len( Discuz.randomString(256))==256)
def testGetKey(self): self.assertTrue( len(Discuz.getKey('1234567890'))==256)
def testBase64(self): s= Discuz.base64Encode('123456') self.assertTrue('123456'==Discuz.base64Decode(s))
def testFileExist(self): self.assertTrue(Discuz.fileExists(r'c:/dt.bak'))
def testCutString(self): self.assertEqual(Discuz.cutString('abc',0),'abc')
def index(request): ''' 接受来自ucenter的调用 qs 是一个词典,action,time每次均会有,其它的根据实际的情况有不同的参数 通常url参数会有code,time但test action可能没有,下面代码需要重构,等确定那些有那些没有 ''' #目前不能处理非gbk编码 code=request.REQUEST.get('code','').encode('gbk') try: time_t=int(request.REQUEST.get('time',0)) except: time_t=0 qs=Discuz.parse_str(Discuz.discuzAuthcode(code, settings.API_KEY,Discuz.DECODE)) log(qs) time=int(qs.get('time',0)) log("time=%s&code=%s" %(time_t,code)) #timestamp = Discuz.unixTimestamp() if time_t and (time_t - time> 3600): #3600秒 延迟 return HttpResponse('Authracation has expiried') if not qs: return HttpResponse('Invalid Request') action = qs.get('action','') if action=='test': #测试 return HttpResponse(settings.API_RETURN_SUCCEED) elif action=='deleteuser': #删除用户 return API().delete_user(qs.get('ids','')) elif action=='renameuser': #改名用户 return API().rename_user(qs.get('uid',0),qs.get('oldusername'),qs.get('newusername')) elif action=='updatepw': #更新用户密码 return API().update_pw(qs.get('username',''),qs.get('password','')) elif action=='gettag': #获得tag return API().get_tag(qs.get('id','')) elif action=='synlogin': #同步登录 return API(request).syn_login(qs.get('uid',0)) elif action=='synlogout': #同步退出 return API(request).syn_logout() elif action=='updatebadwords': #更新过滤词 #return API().update_bad_words() return HttpResponse(settings.API_RETURN_FORBIDDEN) elif action=='updatehosts': return HttpResponse(settings.API_RETURN_FORBIDDEN) elif action=='updateapps': return HttpResponse(settings.API_RETURN_FORBIDDEN) elif action=='updateclient': return HttpResponse(settings.API_RETURN_FORBIDDEN) elif action=='updatecredit': return HttpResponse(settings.API_RETURN_FORBIDDEN) elif action=='getcreditsettings': return HttpResponse(settings.API_RETURN_FORBIDDEN) elif action=='getcredit': return HttpResponse(settings.API_RETURN_FORBIDDEN) return HttpResponse(settings.API_RETURN_SUCCEED)