def search(self, query, user_token): from gbi_server.model import User user = User.by_authproxy_token(user_token) if not user: raise exceptions.Unauthorized() coverage = self.limiter.coverage(user_token) if not coverage: current_app.logger.debug("found no coverage user=%s query=%s", user, request.url) return None query.intersection(coverage, 3857) # query.ids(['072578-040-00042/000']) # f.near((7.88475, 49.859677), 4326, dist=500) # q = sql.select([parcel_table]).where(parcel_table.c.number == cleanup_id('072578-040-00042/000')) features = [] query.limit(1000) sub = query.as_sa() q = sql.select([sub.c.identifier, sql.func.st_astext(sql.func.st_transform(sub.c.geometry, '3857')).label('geometry')]) with self.engine.connect() as conn: for r in conn.execute(q): features.append({ "type": "Feature", "properties": { "id": r.identifier, }, "geometry": mapping(shapely.wkt.loads(r.geometry)), }) return features
def create(self, user_token, layer): from gbi_server.model import User user = User.by_authproxy_token(user_token) if not user: raise InvalidUserToken() result = db.session.query(WMTS, WMTS.view_coverage.transform(3857).wkt()).filter_by(name=layer).first() if result: wmts, view_coverage = result if wmts and wmts.is_public: return wkt.loads(view_coverage) if user.is_customer: couch_url = self.couchdb_url couchdb = CouchDBBox(couch_url, '%s_%s' % (SystemConfig.AREA_BOX_NAME, user.id)) geom = couchdb.layer_extent(self.geometry_layer) return optimize_geometry(geom) if geom else None elif user.is_service_provider: couch_url = self.couchdb_url couchdb = CouchDBBox(couch_url, '%s_%s' % (SystemConfig.AREA_BOX_NAME, user.id)) geom = couchdb.layer_extent() return optimize_geometry(geom) if geom else None elif user.is_admin or user.is_consultant: # permit access to everything return box(-20037508.3428, -20037508.3428, 20037508.3428, 20037508.3428) return None
def update_download_coverage(user_token): user = User.by_authproxy_token(user_token) if not user: json_abort(401, 'unknown user token') signals.features_updated.send(user) return jsonify({'sucess': True})
def search_log_from_features(token, features): user = User.by_authproxy_token(token) sl = SearchLog(user=user) for f in features: g = SearchLogGeometry( identifier=f['properties']['id'], geometry='SRID=3857;' + asShape(f['geometry']).wkt, ) sl.geometries.append(g) return sl
def log(user_token): if request.headers['content-type'] != 'application/json': json_abort(406, "request content-type not application/json") try: log_record = json.loads(request.data) except (TypeError, ValueError): json_abort(400, 'invalid JSON') try: user = User.by_authproxy_token(user_token) if not user: json_abort(401, 'unknown user token') if user.email != log_record['user']: json_abort(401, 'user token does not match user email') time = log_record['time'] action = log_record['action'] except KeyError, ex: json_abort(400, 'missing %s in log record' % ex)
def log(user_token): if request.headers["content-type"] != "application/json": json_abort(406, "request content-type not application/json") try: log_record = json.loads(request.data) except (TypeError, ValueError): json_abort(400, "invalid JSON") try: user = User.by_authproxy_token(user_token) if not user: json_abort(401, "unknown user token") if user.email != log_record["user"]: json_abort(401, "user token does not match user email") time = log_record["time"] action = log_record["action"] except KeyError, ex: json_abort(400, "missing %s in log record" % ex)
def search(self, query, user_token): from gbi_server.model import User user = User.by_authproxy_token(user_token) if not user: raise exceptions.Unauthorized() coverage = self.limiter.coverage(user_token) if not coverage: current_app.logger.debug("found no coverage user=%s query=%s", user, request.url) return None query.intersection(coverage, 3857) # query.ids(['072578-040-00042/000']) # f.near((7.88475, 49.859677), 4326, dist=500) # q = sql.select([parcel_table]).where(parcel_table.c.number == cleanup_id('072578-040-00042/000')) features = [] query.limit(1000) sub = query.as_sa() q = sql.select([ sub.c.identifier, sql.func.st_astext(sql.func.st_transform(sub.c.geometry, '3857')).label('geometry') ]) with self.engine.connect() as conn: for r in conn.execute(q): features.append({ "type": "Feature", "properties": { "id": r.identifier, }, "geometry": mapping(shapely.wkt.loads(r.geometry)), }) return features
def create(self, user_token, layer): from gbi_server.model import User from gbi_server.model import WMTS from gbi_server.extensions import db user = User.by_authproxy_token(user_token) if not user: raise InvalidUserToken() result = db.session.query(WMTS, ST_Transform( WMTS.view_coverage, 3857)).filter_by(name=layer).first() if result: wmts, view_coverage = result if wmts and wmts.is_public: return to_shape(view_coverage) if user.is_customer: couch_url = self.couchdb_url couchdb = CouchDBBox( couch_url, '%s_%s' % (SystemConfig.AREA_BOX_NAME, user.id)) geom = couchdb.layer_extent(self.geometry_layer) return optimize_geometry(geom) if geom else None elif user.is_service_provider: couch_url = self.couchdb_url couchdb = CouchDBBox( couch_url, '%s_%s' % (SystemConfig.AREA_BOX_NAME, user.id)) geom = couchdb.layer_extent() return optimize_geometry(geom) if geom else None elif user.is_admin or user.is_consultant: # permit access to everything return box(-20037508.3428, -20037508.3428, 20037508.3428, 20037508.3428) return None
def create(self, user_token, dbname): from gbi_server.model import User user = User.by_authproxy_token(user_token) if not user: raise InvalidUserToken() if user.is_customer or user.is_service_provider: if dbname in ( '%s_%s' % (SystemConfig.AREA_BOX_NAME, user.id), '%s_%s' % (SystemConfig.CUSTOMER_BOX_NAME, user.id), ): return 'rw' if dbname in ( '%s_%s' % (SystemConfig.CONSULTANT_BOX_NAME, user.id), ): return 'r' elif user.is_admin or user.is_consultant: if dbname.startswith('%s_' % (SystemConfig.CONSULTANT_BOX_NAME, )): return 'rw' elif dbname.startswith('%s_' % (SystemConfig.CUSTOMER_BOX_NAME, )): return 'r' return 'no'