def AddUser(conf,inputs,outputs): if is_connected(conf): c = auth.getCon(conf) prefix=auth.getPrefix(conf) if c.is_admin(conf["senv"]["login"]): try: user = json.loads(inputs["user"]["value"]) except Exception,e: print >> sys.stderr,inputs["user"]["value"] print >> sys.stderr,e conf["lenv"]["message"] = zoo._("invalid user parameter: ")+inputs["user"]["value"] return 4 for (i,j) in user.items(): if not manage_users.check_user_params(i,j): conf["lenv"]["message"] = 'Parametre %s incorrect'%(i) return 4 if c.add_user(user): outputs["Result"]["value"] = inputs["user"]["value"] if inputs.has_key("group"): if inputs["group"].has_key("length"): for i in range(0,len(inputs["group"]["value"])): linkGroupToUser(c,prefix,inputs["group"]["value"],inputs["login"]["value"]) else: linkGroupToUser(c,prefix,inputs["group"]["value"],user["login"]) return 3 else: conf["lenv"]["message"] = zoo._("SQL Error") return 4 else: conf["lenv"]["message"]= zoo._("Action not permited") return 4
def SecureAccess(conf,inputs,outputs): global myCookies mapfile=conf["main"]["dataPath"]+"/public_maps/project_"+inputs["server"]["value"]+".map" try: myMap=mapscript.mapObj(mapfile) except: conf["lenv"]["message"]=zoo._("Unable to find any project with this name!") return zoo.SERVICE_FAILED c = auth.getCon(conf) prefix=auth.getPrefix(conf) if not(validToken(c,prefix,inputs["token"]["value"])): conf["lenv"]["message"]=zoo._("Unable to validate your token!") return zoo.SERVICE_FAILED if not(validIp(conf,c,prefix,inputs["ip"]["value"],0,[inputs["server"]["value"]])): conf["lenv"]["message"]=zoo._("You are not allowed to access the ressource using this ip address!") return zoo.SERVICE_FAILED q=None if inputs["Query"]["mimeType"]=="application/json": import json q=json.loads(inputs["Query"]["value"]) myAutorizedGroups=myMap.web.metadata.get('mm_access_groups').split(',') if myAutorizedGroups.count('public')==0 and not(q is None or q["request"].upper()=="GETCAPABILITIES" or q["request"].upper()=="GETLEGENDGRAPHIC") and not(tryIdentifyUser(conf,inputs["user"]["value"],inputs["password"]["value"])): conf["lenv"]["message"]=zoo._("You are not allowed to access the ressource using this user / password!") conf["lenv"]["status_code"]="401 Unauthorized" print >> sys.stderr,conf["lenv"] return zoo.SERVICE_FAILED if conf.keys().count("senv")==0: conf["senv"]={"group": getGroupFromToken(c,prefix,inputs["token"]["value"])} else: print >> sys.stderr,conf["senv"] try: myCurrentGroups=conf["senv"]["group"].split(',') except Exception,e: myCurrentGroups=[]
def connect (self,conf=None): print >> sys.stderr,self.db if conf is not None: self.conf=conf try: self.db.index(".db") self.conn = sqlite3.connect(self.db) self.cur = self.conn.cursor() self.conn.execute("PRAGMA foreign_keys = ON") self.dbtype="sqlite" self.now="datetime('now')" self.desc="PRAGMA table_info(users)" return True except Exception,e: try: self.conn = psycopg2.connect(self.db) self.cur = self.conn.cursor() self.dbtype="PG" self.now="now()" import authenticate.service as auth import datastores.postgis.pgConnection as pg self.prefix=auth.getPrefix(conf) print >> sys.stderr,self.prefix self.desc=pg.getDesc(self.cur,self.prefix+"users") return True except Exception,e: print >> sys.stderr,e return False
def connect(self, conf=None): if conf is not None: self.conf = conf try: self.db.index(".db") self.paramstyle = sqlite3.paramstyle self.conn = sqlite3.connect(self.db) self.cur = self.conn.cursor() self.conn.execute("PRAGMA foreign_keys = ON") self.dbtype = "sqlite" self.now = "datetime('now')" self.desc = "PRAGMA table_info(users)" return True except Exception, e: try: self.conn = psycopg2.connect(self.db) self.paramstyle = psycopg2.paramstyle self.cur = self.conn.cursor() self.dbtype = "PG" self.now = "now()" import authenticate.service as auth import datastores.postgis.pgConnection as pg self.prefix = auth.getPrefix(conf) self.desc = pg.getDesc(self.cur, self.prefix + "users") return True except Exception, e: print >> sys.stderr, e return False
def requestGroup(conf,inputs,outputs): prefix=auth.getPrefix(conf) if inputs.has_key("id"): clause="id="+inputs["id"]["value"] if inputs["type"]["value"]=="delete": req="DELETE from "+prefix+"groups WHERE "+clause inputs["type"]["value"]="delet" else: if inputs["type"]["value"]=="update": if inputs.has_key("is_admin") and inputs["is_admin"]["value"]=="true": req="UPDATE "+prefix+"groups set name='"+inputs["name"]["value"]+"', description='"+inputs["desc"]["value"]+"', adm=1 WHERE "+clause else: req="UPDATE "+prefix+"groups set name='"+inputs["name"]["value"]+"', description='"+inputs["desc"]["value"]+"', adm=0 WHERE "+clause else: if inputs.has_key("is_admin") and inputs["is_admin"]["value"]=="true": req="INSERT INTO "+prefix+"groups (name,description,adm) VALUES('"+inputs["name"]["value"]+"','"+inputs["desc"]["value"]+"',1)" else: req="INSERT INTO "+prefix+"groups (name,description,adm) VALUES('"+inputs["name"]["value"]+"','"+inputs["desc"]["value"]+"',0)" if inputs["type"]["value"]!="insert" and inputs.has_key("user"): print >> sys.stderr,inputs["user"] c = auth.getCon(conf) print >> sys.stderr,req c.cur.execute(req) c.conn.commit() c.close() print >> sys.stderr,dir(c) outputs["Result"]["value"]=zoo._("Group succcessfully "+inputs["type"]["value"]+"ed") return zoo.SERVICE_SUCCEEDED
def AddUser(conf,inputs,outputs): if is_connected(conf): c = auth.getCon(conf) prefix=auth.getPrefix(conf) if c.is_admin(conf["senv"]["login"]): try: user = json.loads(inputs["user"]["value"]) except Exception,e: print >> sys.stderr,inputs["user"]["value"] print >> sys.stderr,e conf["lenv"]["message"] = zoo._("invalid user parameter: ")+inputs["user"]["value"] return 4 for (i,j) in user.items(): if i!="phone" and not manage_users.check_user_params(i,j): conf["lenv"]["message"] = 'Parametre %s incorrect'%(i) return 4 if c.add_user(user): outputs["Result"]["value"] = zoo._("User successfully inserted") #outputs["Result"]["value"] = inputs["user"]["value"] if inputs.has_key("group"): if inputs["group"].has_key("length"): for i in range(0,len(inputs["group"]["value"])): linkGroupToUser(conf,c,prefix,inputs["group"]["value"][i],user["login"]) else: linkGroupToUser(conf,c,prefix,inputs["group"]["value"],user["login"]) return 3 else: conf["lenv"]["message"] = zoo._("SQL Error") return 4 else: conf["lenv"]["message"]= zoo._("Action not permited") return 4
def requestGroup(conf,inputs,outputs): prefix=auth.getPrefix(conf) if inputs.has_key("id"): clause="id="+inputs["id"]["value"] if inputs["type"]["value"]=="delete": req="DELETE from "+prefix+"groups WHERE "+clause inputs["type"]["value"]="delet" else: if inputs["type"]["value"]=="update": if inputs.has_key("is_admin") and inputs["is_admin"]["value"]=="true": req="UPDATE "+prefix+"groups set name='"+inputs["name"]["value"]+"', description='"+inputs["desc"]["value"]+"', adm=1 WHERE "+clause else: req="UPDATE "+prefix+"groups set name='"+inputs["name"]["value"]+"', description='"+inputs["desc"]["value"]+"', adm=0 WHERE "+clause else: if inputs.has_key("is_admin") and inputs["is_admin"]["value"]=="true": req="INSERT INTO "+prefix+"groups (name,description,adm) VALUES('"+inputs["name"]["value"]+"','"+inputs["desc"]["value"]+"',1)" else: req="INSERT INTO "+prefix+"groups (name,description,adm) VALUES('"+inputs["name"]["value"]+"','"+inputs["desc"]["value"]+"',0)" if inputs["type"]["value"]!="insert" and inputs.has_key("user"): print >> sys.stderr,inputs["user"] c = auth.getCon(conf) print >> sys.stderr,req c.cur.execute(req) c.conn.commit() c.close() outputs["Result"]["value"]=zoo._("Group succcessfully updated") #outputs["Result"]["value"]=zoo._("Group succcessfully updated") return zoo.SERVICE_SUCCEEDED
def CreateToken(conf,inputs,outputs): import time import shortInteger newNameId=str(time.time()).split('.')[0] name=shortInteger.shortURL(int(newNameId)) prefix=auth.getPrefix(conf) req="INSERT INTO "+prefix+"tokens (id_group,value) VALUES ((SELECT id from "+prefix+"groups WHERE name='"+inputs["group"]["value"]+"'),'"+name+"')" c = auth.getCon(conf) res=c.cur.execute(req) c.conn.commit() outputs["Result"]["value"]=name return zoo.SERVICE_SUCCEEDED
def update_user_by_login(self,d_user,login): if self.conf is not None: import authenticate.service as auth prefix=auth.getPrefix(self.conf) else: prefix="" if d_user.has_key('id'):# or d_user.has_key('login'): return False if d_user.has_key('passwd'): d_user['passwd'] = mm_md5(d_user['passwd']) u = ",".join(["%s=\'%s\'" % (k, v) for k, v in d_user.items()]) req = 'update '+prefix+'users set %s where login=\'%s\''%(u,login) return self.execute_req(req)
def loadContext(conf,inputs,outputs): con=auth.getCon(conf) prefix=auth.getPrefix(conf) con.connect() conn = con.conn cur = con.conn.cursor() name=inputs["name"]["value"] req="SELECT ext,layers from "+prefix+"contexts where name = [_name_]" con.pexecute_req([req,{"name":{"value":name,"format":"s"}}]) con.conn.commit() res=con.cur.fetchall() outputs["Result"]["value"]=json.dumps({"ext": res[0][0],"layers": res[0][1].split(',')}) return zoo.SERVICE_SUCCEEDED
def loadContext(conf,inputs,outputs): con=auth.getCon(conf) prefix=auth.getPrefix(conf) con.connect() conn = con.conn cur = con.conn.cursor() name=inputs["name"]["value"] req="SELECT ext,layers from "+prefix+"contexts where name = '"+name+"'" cur.execute(req) con.conn.commit() res=cur.fetchall() outputs["Result"]["value"]=json.dumps({"ext": res[0][0],"layers": res[0][1].split(',')}) return zoo.SERVICE_SUCCEEDED
def update_user_by_login(self, d_user, login): if self.conf is not None: import authenticate.service as auth prefix = auth.getPrefix(self.conf) else: prefix = "" if d_user.has_key('id'): # or d_user.has_key('login'): return False if d_user.has_key('passwd'): d_user['passwd'] = mm_md5(d_user['passwd']) u = ",".join(["%s=\'%s\'" % (k, v) for k, v in d_user.items()]) req = 'update ' + prefix + 'users set %s where login=\'%s\'' % (u, login) return self.execute_req(req)
def unShortURL(conf,c): con=auth.getCon(conf) prefix=auth.getPrefix(conf) con=con.conn cur=con.cursor() try: import sys cur.execute("SELECT * from "+prefix+"savedpath where trace='"+c+"'") res=cur.fetchall() if len(res)==0: raise except Exception, e: print >> sys.stderr,str(e) raise
def unShortURL(conf, c): con = auth.getCon(conf) prefix = auth.getPrefix(conf) con = con.conn cur = con.cursor() try: import sys cur.execute("SELECT * from " + prefix + "savedpath where trace='" + c + "'") res = cur.fetchall() if len(res) == 0: raise except Exception, e: print >> sys.stderr, str(e) raise
def UpdateGroup(conf,inputs,outputs): psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) if is_connected(conf): prefix=auth.getPrefix(conf) c = auth.getCon(conf) clause="" if inputs.keys().count("clause")>0: clause=inputs["clause"]["value"] try: group = json.loads(inputs["set"]["value"]) except Exception,e: try: group = json.loads(inputs["group"]["value"]) except Exception,e1: conf["lenv"]["message"] = zoo._("Invalid set parameter: ")+inputs["set"]["value"]+"\n"+str(e)+"\n"+str(e1) return zoo.SERVICE_FAILED
def loadContext(conf, inputs, outputs): con = auth.getCon(conf) prefix = auth.getPrefix(conf) con.connect() conn = con.conn cur = con.conn.cursor() name = inputs["name"]["value"] req = "SELECT ext,layers from " + prefix + "contexts where name = [_name_]" con.pexecute_req([req, {"name": {"value": name, "format": "s"}}]) con.conn.commit() res = con.cur.fetchall() outputs["Result"]["value"] = json.dumps({ "ext": res[0][0], "layers": res[0][1].split(',') }) return zoo.SERVICE_SUCCEEDED
def BasicRewrite(conf,inputs,outputs): if inputs["Query"].keys().count("fmimeType")==0 and inputs["Query"].keys().count("mimeType")>0: inputs["Query"]["fmimeType"]=inputs["Query"]["mimeType"] if inputs["Query"].keys().count("fmimeType")>0 and inputs["Query"]["fmimeType"].count("text/")==0: outputs["Result"]["value"]=inputs["Query"]["value"] outputs["Result"]["mimeType"]=inputs["Query"]["fmimeType"] res=outputs["Result"].pop("encoding") else: outputs["Result"]["mimeType"]="text/xml" c = auth.getCon(conf) prefix=auth.getPrefix(conf) sUrl=getUrl(conf,c,prefix,inputs["server"]["value"]) #outputs["Result"]["value"]=inputs["Query"]["value"].replace(sUrl,conf["main"]["owsSecurityUrl"]+"?server="+inputs["server"]["value"]+"&token="+inputs["token"]["value"]) outputs["Result"]["value"]=inputs["Query"]["value"].replace(sUrl,conf["main"]["owsSecurityUrl"]+inputs["token"]["value"]+"/"+inputs["server"]["value"]+"/").replace('<AccessConstraints>none</AccessConstraints>','<wms:AccessConstraints xmlns:wms="http://www.opengis.net/wms" xmlns:ows_security="http://www.opengis.net/security/1.0" xmlns:ows="http://www.opengis.net/ows/1.1">https://www.opengis.net/def/security/1.0/cc/wms130</wms:AccessConstraints>') print >> sys.stderr,'<wms:AccessConstraints xmlns:wms="http://www.opengis.net/wms" xmlns:ows_security="http://www.opengis.net/security/1.0" xmlns:ows="http://www.opengis.net/ows/1.1">https://www.opengis.net/def/security/1.0/cc/wms130</wms:AccessConstraints>' outputs["Result"]["mimeType"]=inputs["Query"]["fmimeType"] return zoo.SERVICE_SUCCEEDED
def SecureResponse(conf,inputs,outputs): c = auth.getCon(conf) prefix=auth.getPrefix(conf) sUrl=getUrl(conf,c,prefix,inputs["server"]["value"]) #print >> sys.stderr," ** " #print >> sys.stderr,inputs #print >> sys.stderr," ** " if sUrl is None: conf["lenv"]["message"]=zoo._("No server found.") return zoo.SERVICE_FAILED if inputs["Query"].keys().count("fmimeType")==0 and inputs["Query"].keys().count("mimeType")>0: inputs["Query"]["fmimeType"]=inputs["Query"]["mimeType"] outputs["Result"]["mimeType"]=inputs["Query"]["fmimeType"] if inputs["Query"]["fmimeType"]!="text/xml": outputs["Result"]["value"]=inputs["Query"]["value"] outputs["Result"]["mimeType"]=inputs["Query"]["fmimeType"] return zoo.SERVICE_SUCCEEDED vals=getEntities(c,prefix,inputs["service"]["value"],"GetCapabilities") if vals is not None: context = etree.iterparse(StringIO(inputs["Query"]["value"].replace('<?xml version="1.0" encoding="utf-8"?>\n','')), events=('end',), tag='{*}'+vals[0]) else: context=[] lName="Name" toRemove=[] for event, elem in context: try: if inputs["service"]["value"]=="WPS": context0 = etree.iterparse(StringIO(etree.tostring(elem)), events=('end',), tag='{*}Identifier') lName="Identifier" else: context0 = etree.iterparse(StringIO(etree.tostring(elem)), events=('end',), tag='{*}Name') for event, elem in context0: print >> sys.stderr,elem.text.encode('utf-8') if not(checkEntityPriv(conf,c,prefix,inputs["server"]["value"],inputs["service"]["value"],elem.text.encode('utf-8'),"r",inputs["token"]["value"])): toRemove+=[elem.text.encode('utf-8')] except Exception,e: print >> sys.stderr, e print >> sys.stderr, '%s <=> %s' % (elem.tag, elem.text) elem.clear() while elem.getprevious() is not None: del elem.getparent()[0]
def UpdateUser(conf,inputs,outputs): if is_connected(conf): prefix=auth.getPrefix(conf) c = auth.getCon(conf) try: user = json.loads(inputs["set"]["value"]) except Exception,e: user={} print >> sys.stderr,inputs["set"]["value"] print >> sys.stderr,e conf["lenv"]["message"] = zoo._("invalid set parameter :")+inputs["set"]["value"] #return 4 if inputs['id']["value"] == "NULL": userl=conf["senv"]["login"] if not(inputs.has_key("type")) or inputs["type"]["value"]!="delete": for (i,j) in user.items(): if not manage_users.check_user_params(i,j): conf["lenv"]["message"] = 'Parametre %s incorrect'%(i) return 4 if i=="login": userl=j if inputs.has_key("login"): userl=inputs["login"]["value"] if inputs.has_key("type") and inputs["type"]["value"]=="delete": try: c.cur.execute("DELETE FROM "+prefix+"user_group WHERE id_user=(select id from "+prefix+"users where login='******')") except Exception,e: print >> sys.stderr,e pass try: c.cur.execute("DELETE FROM indicateurs_favoris WHERE u_id=(select id from "+prefix+"users where login='******')") except Exception,e: print >> sys.stderr,e pass try: c.cur.execute("DELETE FROM "+prefix+"favoris WHERE u_id=(select id from "+prefix+"users where login='******')") except Exception,e: print >> sys.stderr,e pass
def saveContext(conf,inputs,outputs): print >> sys.stderr,"DEBUG 0000" #conn = sqlite3.connect(conf['main']['dblink']) con=auth.getCon(conf) prefix=auth.getPrefix(conf) con.connect() cur = con.conn.cursor() newNameId=str(time.time()).split('.')[0] name=shortInteger.shortURL(int(newNameId)) layers="" if inputs["layers"].has_key('length'): for i in inputs["layers"]["value"]: if layers!='': layers+="," layers+=i else: layers+=inputs["layers"]["value"] req="INSERT INTO "+prefix+"contexts (name,layers,ext) VALUES ([_name_],[_layers_],[_extent_])" con.pexecute_req([req,{"name":{"value":name,"format":"s"},"layers":{"value":layers,"format":"s"},"extent":{"value":inputs["extent"]["value"],"format":"s"}}]) con.conn.commit() outputs["Result"]["value"]=conf["main"]["applicationAddress"]+"public/"+conf["senv"]["last_map"]+";c="+name return zoo.SERVICE_SUCCEEDED
def saveContext(conf, inputs, outputs): print >> sys.stderr, "DEBUG 0000" #conn = sqlite3.connect(conf['main']['dblink']) con = auth.getCon(conf) prefix = auth.getPrefix(conf) con.connect() cur = con.conn.cursor() newNameId = str(time.time()).split('.')[0] name = shortInteger.shortURL(int(newNameId)) layers = "" if inputs["layers"].has_key('length'): for i in inputs["layers"]["value"]: if layers != '': layers += "," layers += i else: layers += inputs["layers"]["value"] req = "INSERT INTO " + prefix + "contexts (name,layers,ext) VALUES ([_name_],[_layers_],[_extent_])" con.pexecute_req([ req, { "name": { "value": name, "format": "s" }, "layers": { "value": layers, "format": "s" }, "extent": { "value": inputs["extent"]["value"], "format": "s" } } ]) con.conn.commit() outputs["Result"][ "value"] = conf["main"]["applicationAddress"] + "public/" + conf[ "senv"]["last_map"] + ";c=" + name return zoo.SERVICE_SUCCEEDED
def UpdateUser(conf, inputs, outputs): if is_connected(conf): prefix = auth.getPrefix(conf) c = auth.getCon(conf) try: user = json.loads(inputs["set"]["value"]) except Exception, e: user = {} print >> sys.stderr, inputs["set"]["value"] print >> sys.stderr, e conf["lenv"]["message"] = zoo._( "invalid set parameter :") + inputs["set"]["value"] return 4 if inputs['id']["value"] == "NULL": userl = conf["senv"]["login"] if not (inputs.has_key("type") ) or inputs["type"]["value"] != "delete": for (i, j) in user.items(): if not manage_users.check_user_params(i, j): conf["lenv"]["message"] = 'Parametre %s incorrect' % ( i) return 4 if i == "login": userl = j if inputs.has_key("login"): userl = inputs["login"]["value"].decode("utf-8") if inputs.has_key("type") and inputs["type"]["value"] == "delete": try: c.cur.execute("DELETE FROM " + prefix + "users WHERE login='******'") except Exception, e: print >> sys.stderr, e pass c.conn.commit() tmpStr = zoo._('User succcessfully %s') tmpStr = tmpStr % (inputs["type"]["value"] + 'd') outputs["Result"]["value"] = tmpStr #outputs["Result"]["value"] = inputs["set"]["value"] return 3 if c.update_user_by_login(user, userl): #outputs["Result"]["value"] = inputs["set"]["value"] tmpStr = zoo._('User succcessfully %s') tmpStr = tmpStr % (inputs["type"]["value"] + 'd') outputs["Result"]["value"] = tmpStr print >> sys.stderr, inputs["group"]["value"] if inputs.has_key( "group") and inputs["group"]["value"] != "NULL": print >> sys.stderr, inputs["group"] try: c.cur.execute( "DELETE FROM " + prefix + "user_group where id_user=(select id from " + prefix + "users where login='******')") c.con.commit() except: pass if inputs["group"].has_key("length"): for i in range(0, len(inputs["group"]["value"])): linkGroupToUser(conf, c, prefix, inputs["group"]["value"][i], inputs["login"]["value"]) else: linkGroupToUser(conf, c, prefix, inputs["group"]["value"], inputs["login"]["value"]) return 3 else: conf["lenv"]["message"] = zoo._("Update failed") return 4
def getTableFeatures(conf, inputs, outputs): c = auth.getCon(conf) prefix = auth.getPrefix(conf) if c.dbtype != "PG": req = "PRAGMA table_info(" + inputs["table"]["value"] + ")" else: import datastores.postgis.pgConnection as pg req = pg.getDesc(c.cur, auth.getPrefix(conf) + inputs["table"]["value"]) res1 = c.cur.execute(req) res = c.cur.fetchall() fields = [] pkey = 0 pfield = "id" vfields = None if inputs.has_key("cols") and inputs["cols"]["value"] != "NULL": vfields = inputs["cols"]["value"].split(",") if vfields is None: for i in range(0, len(res)): fields += [{ "name": res[i][1], "type": res[i][2], "pkey": res[i][4] }] if res[i][4] == 1: pkey = i else: for j in range(0, len(vfields)): for i in range(0, len(res)): if res[i][1] == vfields[j]: fields += [{ "name": res[i][1], "type": res[i][2], "pkey": res[i][4] }] if res[i][4] == 1 or res[i][3] == 'PRI': pkey = i pfield = res[i][1] req = "select count(*) from " + prefix + inputs["table"]["value"] req1 = "SELECT " + pfield + " from " + prefix + inputs["table"]["value"] res1 = c.cur.execute(req) res = c.cur.fetchall() if res != False: total = res[0][0] req = "select " if inputs.has_key("fields") and inputs["fields"]["value"] != "NULL": req += inputs["fields"]["value"] else: req += "*" req += " from " + prefix + inputs["table"]["value"] if inputs.has_key("clause") and inputs["clause"]["value"] != "NULL": req += " WHERE " + inputs["clause"]["value"] req1 += " WHERE " + inputs["clause"]["value"] if inputs.has_key("search") and inputs["search"][ "value"] != "asc" and inputs["search"]["value"] != "desc": req += " WHERE " req1 += " WHERE " mfields = inputs["fields"]["value"].split(',') for i in range(0, len(mfields)): req+=mfields[i]+" LIKE '%"+inputs["search"]["value"]+"%' OR "+ \ mfields[i]+" LIKE '"+inputs["search"]["value"]+"%' OR " +\ mfields[i]+" LIKE '%"+inputs["search"]["value"]+"' " if i + 1 < len(mfields): req += " OR " req1+=mfields[i]+" LIKE '%"+inputs["search"]["value"]+"%' OR "+ \ mfields[i]+" LIKE '"+inputs["search"]["value"]+"%' OR " +\ mfields[i]+" LIKE '%"+inputs["search"]["value"]+"' " if i + 1 < len(mfields): req1 += " OR " if inputs.has_key( "sortname") and inputs["sortname"]["value"] != "NULL" and inputs[ "sortname"]["value"] != "undefined" and inputs["sortorder"][ "value"] != "undefined": req += " ORDER BY " + inputs["sortname"]["value"] + " " + inputs[ "sortorder"]["value"] req1 += " ORDER BY " + inputs["sortname"]["value"] + " " + inputs[ "sortorder"]["value"] if inputs.has_key("limit") and inputs["limit"]["value"] != "NULL": req += " LIMIT " + inputs["limit"]["value"] req1 += " LIMIT " + inputs["limit"]["value"] if inputs.has_key("offset") and inputs["offset"]["value"] != "": req += " OFFSET " + inputs["offset"]["value"] req1 += " OFFSET " + inputs["offset"]["value"] else: req += " LIMIT 10" req1 += " LIMIT 10" res1 = c.cur.execute(req) res = c.cur.fetchall() resId1 = c.cur.execute(req1) resId = c.cur.fetchall() if res != False: rows = [] for i in range(0, len(res)): res0 = [] for k in range(0, len(res[i])): if res[i][k] is not None and fields[k]["type"].count( "char") > 0: try: res0 += [res[i][k].encode("utf-8")] except: res0 += [res[i][k]] else: res0 += [str(res[i][k])] rows += [{ "id": resId[i][0], "group": c.get_groups_user_by_id(int(resId[i][0])), "cell": res0 }] outputs["Count"]["value"] = str(total) outputs["Result"]["value"] = json.dumps({"total": total, "rows": rows}) return zoo.SERVICE_SUCCEEDED else: print >> sys.stderr, "unable to run request" return zoo.SERVICE_FAILED
def getTableContent(conf,inputs,outputs): c = auth.getCon(conf) prefix=auth.getPrefix(conf) if c.dbtype!="PG": req="PRAGMA table_info("+inputs["table"]["value"]+")" else: import datastores.postgis.pgConnection as pg req=pg.getDesc(c.cur,auth.getPrefix(conf)+inputs["table"]["value"]) res1=c.cur.execute(req) res=c.cur.fetchall() print >> sys.stderr,res fields=[] pkey=0 pfield="id" vfields=None if inputs.has_key("cols") and inputs["cols"]["value"]!="NULL": vfields=inputs["cols"]["value"].split(",") if vfields is None: for i in range(0,len(res)): fields+=[{"name": res[i][1],"type": res[i][2],"pkey": res[i][4]}] if res[i][4]==1: pkey=i else: for j in range(0,len(vfields)): for i in range(0,len(res)): if res[i][1]==vfields[j]: fields+=[{"name": res[i][1],"type": res[i][2],"pkey": res[i][4]}] if res[i][4]==1 or res[i][3]=='PRI': pkey=i pfield=res[i][1] req="select count(*) from "+prefix+inputs["table"]["value"] res1=c.cur.execute(req) res=c.cur.fetchall() if res!=False: total=res[0][0] req="select " if inputs.has_key("cols") and inputs["cols"]["value"]!="NULL": req+=inputs["cols"]["value"] else: req+="*" req+=" from "+prefix+inputs["table"]["value"] if inputs.has_key("clause") and inputs["clause"]["value"]!="NULL": req+=" WHERE "+inputs["clause"]["value"] if inputs.has_key("sortname") and inputs["sortname"]["value"]!="NULL" and inputs["sortname"]["value"]!="undefined" and inputs["sortorder"]["value"]!="undefined": req+=" ORDER BY "+inputs["sortname"]["value"]+" "+inputs["sortorder"]["value"] if inputs.has_key("limit") and inputs["limit"]["value"]!="NULL": req+=" LIMIT "+inputs["limit"]["value"] if inputs.has_key("page") and inputs["page"]["value"]!="": req+=" OFFSET "+str((int(inputs["page"]["value"])-1)*int(inputs["limit"]["value"])) page=inputs["page"]["value"] else: page=1 req+=" LIMIT 10" res1=c.cur.execute(req) res=c.cur.fetchall() resId1=c.cur.execute("SELECT "+pfield+" from "+prefix+inputs["table"]["value"]) resId=c.cur.fetchall() if res!=False: rows=[] for i in range(0,len(res)): res0=[] for k in range(0,len(res[i])): if res[i][k] is not None and fields[k]["type"].count("char")>0: try: res0+=[res[i][k].encode("utf-8")] except: res0+=[res[i][k]] else: res0+=[str(res[i][k])] rows+=[{"id": resId[i][0],"cell": res0}] outputs["Result"]["value"]=json.dumps({"page": page, "total": total,"rows": rows}) return zoo.SERVICE_SUCCEEDED else: print >> sys.stderr,"unable to run request" return zoo.SERVICE_FAILED
def UpdateUser(conf,inputs,outputs): if is_connected(conf): prefix=auth.getPrefix(conf) c = auth.getCon(conf) try: user = json.loads(inputs["set"]["value"]) except Exception,e: user={} print >> sys.stderr,inputs["set"]["value"] print >> sys.stderr,e conf["lenv"]["message"] = zoo._("invalid set parameter :")+inputs["set"]["value"] return 4 if inputs['id']["value"] == "NULL": userl=conf["senv"]["login"] if not(inputs.has_key("type")) or inputs["type"]["value"]!="delete": for (i,j) in user.items(): if not manage_users.check_user_params(i,j): conf["lenv"]["message"] = 'Parametre %s incorrect'%(i) return 4 if i=="login": userl=j if inputs.has_key("login"): userl=inputs["login"]["value"].decode("utf-8") if inputs.has_key("type") and inputs["type"]["value"]=="delete": try: c.cur.execute("DELETE FROM "+prefix+"users WHERE login='******'") except Exception,e: print >> sys.stderr,e pass c.conn.commit() tmpStr=zoo._('Group succcessfully %s') tmpStr=tmpStr % (inputs["type"]["value"]+'d') outputs["Result"]["value"]=tmpStr #outputs["Result"]["value"] = inputs["set"]["value"] return 3 if c.update_user_by_login(user,userl): #outputs["Result"]["value"] = inputs["set"]["value"] tmpStr=zoo._('User succcessfully %s') tmpStr=tmpStr % (inputs["type"]["value"]+'d') outputs["Result"]["value"]=tmpStr print >> sys.stderr,inputs["group"]["value"] if inputs.has_key("group") and inputs["group"]["value"]!="NULL": print >> sys.stderr,inputs["group"] try: c.cur.execute("DELETE FROM "+prefix+"user_group where id_user=(select id from "+prefix+"users where login='******')") c.con.commit() except: pass if inputs["group"].has_key("length"): for i in range(0,len(inputs["group"]["value"])): linkGroupToUser(conf,c,prefix,inputs["group"]["value"][i],inputs["login"]["value"]) else: linkGroupToUser(conf,c,prefix,inputs["group"]["value"],inputs["login"]["value"]) return 3 else: conf["lenv"]["message"] = zoo._("Update failed") return 4