def get(self, callback_url, dataPacket): ''' 处理过程: 1. 查询appId是否合法,即验证appId,appSecret,callback_url的合法性; 2. 用户登录 3. 如果用户未对此应用授权,则用户对该应用授权 4. 反回临时code,即:Authcode 5. 跳转到callback_url?authcode=$authocde ''' try: #super().get(self) self._db_ = None if self.getRequestHeader('app-secret') != config.App_Secret: raise BaseError(601) # 未经授权的第三方应用 appId = self.getRequestHeader('App-Key') appSecret = self.getRequestHeader('App-Secret') #1. 查询appId是否合法,即验证appId,appSecret,callback_url的合法性; db = self.openDB() conditions = {'select': 'app_secret,callback_url'} row = db.getToObjectByPk('tbApps', conditions, appId, pk='app_key') if (len(row) == 0 or (row['app_secret'] + row['callback_url']) != (appSecret.strip() + callback_url.strip())): raise BaseError(601) # 未经授权的第三方应用 #2. 解数据包 dataPacket = base64.standard_b64decode(dataPacket).decode() uidLength = int(dataPacket[17:19]) iv = dataPacket[:16] uid = dataPacket[-uidLength:] encryptedUrl = dataPacket[19:-uidLength] #3. 查询uid查询password conditions = {'select': 'password'} row = db.getToObjectByPk('tbUser', conditions, uid, pk='user') self.closeDB() if len(row) == 0: raise BaseError(603) # '603' - 用户名或密码错误. passwd = row['password'] #4. 用passwd对surl进行AES反解码 generator = AES.new(passwd, AES.MODE_CBC, iv) cryptedStr = encryptedUrl crypt = base64.b64decode(cryptedStr) try: recovery = generator.decrypt(crypt).decode() except: recovery = '' url = recovery.rstrip('\0') self.set_header('Access-Control-Allow-Origin', '*') if callback_url != url: self.set_header('Authorization', '') raise BaseError(603) # '603' - 用户名或密码错误. #self.set_header('status', 404) authcode = appId + uid + iv + url + str(int(time.time())) authcode = md5(authcode.encode()).hexdigest() # Access-Control-Expose-Headers 白名单 self.set_header('Access-Control-Expose-Headers', 'Authorization') self.set_header('Authorization', authcode) #将一些通用参数带下 self.response('OK') #将iAuthorization记录到Redis myToken = Token(config.RedisConfig) myToken.saveToRedis(authcode, uid) except BaseError as e: self.gotoErrorPage(e.code)
def get(self): user_id = self.get_argument('user_id', default='') hospital_code = self.get_argument('hospital_code', default='') his_id = self.get_argument('his_id', default='') #进首页不需要,n>1 name = self.get_argument('name', default='') #进首页的查询 no = int(self.get_argument('no', default='')) #根据no的值判断不同的请求 id_no = self.get_argument('id_no', default='') #病人的身份证号 offset = int(self.get_argument("o", default='1')) rowcount = int(self.get_argument("r", default='10')) file_id = self.get_argument('file_id', default='') print(file_id) offset = (offset - 1) * rowcount #翻译 if no == 1: try: messenger_rna = Seq(name, IUPAC.unambiguous_rna) a = messenger_rna.translate() except Exception as e: raise BaseError(601) rowdata = {} rowdata['rows'] = str(a) print(rowdata) self.response(rowdata) #转录 if no == 2: coding_dna = Seq(name, IUPAC.unambiguous_dna) template_dna = coding_dna.reverse_complement() rowdata = {} rowdata['rows'] = str(template_dna) print(rowdata) self.response(rowdata) #互补序列 if no == 3: my_seq = Seq(name, IUPAC.unambiguous_dna) a = my_seq.complement() rowdata = {} rowdata['rows'] = str(a) print(rowdata) self.response(rowdata) #将序列文件转换为大写 if no == 4: cur = self.db.getCursor() if file_id: sql = "select file_name,path from public.file where id=%s " % ( file_id) else: sql = " " cur.execute(sql) rows = cur.fetchall() filepath = '/home/ubuntu/pythonff/mdt/mdt/mdtproject/trunk/app/' + rows[ 0][1] oldpath = filepath.replace(rows[0][0], "upp" + rows[0][0]) rowdata = {} records = (rec.upper() for rec in SeqIO.parse(filepath, "fasta")) count = SeqIO.write(records, oldpath, "fasta") rowss = "Converted %i records to upper case" % count rowdata['resu'] = rowss rowdata['down'] = str(rows[0][1]).replace(rows[0][0], "upp" + rows[0][0]) #print(rows[0][1],row[0][0]) for seq_record in SeqIO.parse(oldpath, "fasta"): rowdata['rows'] = ((str(seq_record.id)), str(seq_record.seq), len(seq_record), rows[0][0], str(repr(seq_record.description))) self.response(rowdata) #对序列文件进行排序 if no == 5: cur = self.db.getCursor() if file_id: sql = "select file_name,path from public.file where id=%s " % ( file_id) else: sql = " " cur.execute(sql) rows = cur.fetchall() filepath = '/home/ubuntu/pythonff/mdt/mdt/mdtproject/trunk/app/' + rows[ 0][1] oldpath = filepath.replace(rows[0][0], "sort" + rows[0][0]) rowdata = {} len_and_ids = sorted((len(rec), rec.id) for rec in \ SeqIO.parse(filepath,"fasta")) ids = reversed([id for (length, id) in len_and_ids]) del len_and_ids #free this memory record_index = SeqIO.index(filepath, "fasta") records = (record_index[id] for id in ids) SeqIO.write(records, oldpath, "fasta") rowdata['resu'] = "排序成功" rowdata['down'] = str(rows[0][1]).replace(rows[0][0], "sort" + rows[0][0]) #print(rows[0][1],row[0][0]) for seq_record in SeqIO.parse(oldpath, "fasta"): rowdata['rows'] = ((str(seq_record.id)), str(seq_record.seq), len(seq_record), rows[0][0], str(repr(seq_record.description))) print(rowdata) self.response(rowdata) #no=6,显示序列文件 if no == 6: cur = self.db.getCursor() if file_id: sql = "select file_name,path from public.file where id=%s " % ( file_id) else: sql = " " cur.execute(sql) rows = cur.fetchall() filepath = '/home/ubuntu/pythonff/mdt/mdt/mdtproject/trunk/app/' + rows[ 0][1] rowdata = {} rowdata['down'] = str(rows[0][1]) for seq_record in SeqIO.parse(filepath, "fasta"): rowdata['rows'] = ((str(seq_record.id)), str(seq_record.seq), len(seq_record), rows[0][0], str(repr(seq_record.description))) print(rowdata) self.response(rowdata) #n0==7,读取序列文件 if no == 7: self.response(rowdata) #no=8,患者信息 if no == 8: self.response(rowdata)
def add(self, data, table=None, _commit=False): if not table: table = self.table #加入到数据库 rid = self.db.insert(table, data, commit=_commit) if rid < 1: raise BaseError(703) # SQL执行错误 return rid