def command(gateway, name, command, param=None, id=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") if not id: id = str(uuid.uuid1()).upper() try: ret = send_action("command", id=id, device=gateway, data={ "device": name, "cmd": command, "param": param, }) frappe.response.update({"ok": True, "data": ret}) except Exception as ex: throw("exception") except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def output(gateway, name, output, prop, value, id=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") if not id: id = str(uuid.uuid1()).upper() try: ret = send_action("output", id=id, device=gateway, data={ "device": name, "output": output, "prop": prop, "value": value }) frappe.response.update({"ok": True, "data": ret}) except Exception as ex: throw("exception") except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def remove(gateway, inst, id=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") ret = fire_action(id=id, action="uninstall", gateway=gateway, data={"inst": inst}) # frappe.get_doc({ # "doctype": "IOT Application Statistics", # "app": app, # "device": gateway, # "version": version, # "action": 'UNINSTALL', # "owner_company": doc.company, # "owner_type": doc.owner_type, # "owner_id": doc.owner_id, # }).insert() frappe.response.update({"ok": True, "data": ret}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def update_id_card_image(): try: valid_auth_code() name = frappe.form_dict.name if not frappe.get_value("App Developer Requisition", name, "name"): throw("object_not_found") f = frappe.request.files.get('file') # 从表单的file字段获取文件,app_file为该表单的name值 if not f: throw("id_card_image_file_not_attached") doc = frappe.get_doc("App Developer Requisition", name) file_path = save_image_file(doc.comp_name, f, 'id_card_image') doc.set("id_card_image", file_path) doc.save() frappe.response.update({ "ok": True, "data": file_path }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def create(): try: valid_auth_code() data = get_post_json_data() if not data.get("comp_name"): throw("company_name_missing") if not data.get("domain"): throw("domain_missing") data.update({ "doctype": "Cloud Company", "admin": frappe.session.user, "enabled": 0, "wechat": 0 }) doc = frappe.get_doc(data).insert() frappe.response.update({ "ok": True, "data": doc.name }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def upgrade(gateway, inst, app, version, conf=None, id=None, fork=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") data = { "inst": inst, "name": app, "version": version, } if conf is not None: data.update({"conf": conf}) if fork is not None: data.update({"fork": fork}) ret = fire_action(id=id, action="upgrade", gateway=gateway, data=data) frappe.get_doc({ "doctype": "IOT Application Statistics", "app": app, "device": gateway, "version": version, "action": 'UPGRADE', "owner_company": doc.company, "owner_type": doc.owner_type, "owner_id": doc.owner_id, }).insert() frappe.response.update({"ok": True, "data": ret}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def fire_action(id, action, gateway, data): try: if id is None: id = str(uuid.uuid1()).upper() return send_action("sys", action=action, id=id, device=gateway, data=data) except Exception as ex: throw("exception")
def exists(user): try: valid_auth_code() if 'Company Admin' in frappe.get_roles(): throw("has_no_permission") if cint( frappe.db.get_value("System Settings", "System Settings", "allow_login_using_mobile_number")): user = frappe.db.get_value( "User", filters={"mobile_no": user}, fieldname="name") or user if cint( frappe.db.get_value("System Settings", "System Settings", "allow_login_using_user_name")): user = frappe.db.get_value( "User", filters={"username": user}, fieldname="name") or user data = 1 if not cint(frappe.db.get_value('User', user, 'enabled')): data = 0 frappe.response.update({"ok": True, "data": data}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def add(app, comment=None, priority=0): try: valid_auth_code() if frappe.request.method != "POST": throw("method_must_be_post") if not frappe.get_value("IOT Application Favorites", frappe.session.user, "name"): frappe.get_doc({ "doctype": "IOT Application Favorites", "user": frappe.session.user, "favorites": [{ "app": app, "comment": comment, "priority": priority }] }).insert() else: doc = frappe.get_doc("IOT Application Favorites", frappe.session.user) doc.add_favorites({ "app": app, "comment": comment, "priority": priority }) frappe.response.update({"ok": True, "data": "favorites_added"}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def upgrade(name, version=None, no_ack=1, skynet_version=None, id=None): try: if not version and not skynet_version: throw("version_missing") valid_auth_code() doc = frappe.get_doc('IOT Device', name) if not doc.has_permission("write"): throw("has_no_permission") data = { "no_ack": no_ack, } if version is not None: data.update({ "version": version }) if skynet_version is not None: data.update({ "skynet": {"version": skynet_version} }) ret = fire_action(id=id, action="upgrade", gateway=name, data=data) frappe.response.update({ "ok": True, "data": ret }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def create(): try: valid_auth_code() data = get_post_json_data() # TODO: Enable all employee to create/edit/delete for now! # if 'Company Admin' not in frappe.get_roles(): # throw("only_admin_can_create_shared_group") # if frappe.get_value("Cloud Company", data.get('company'), "admin") != frappe.session.user: # throw("you_are_not_admin_of_this_company") if not data.get("group_name"): throw("group_name_missing") if not data.get("company"): throw("company_id_missing") data.update({ "doctype": "IOT Share Group", }) doc = frappe.get_doc(data).insert() frappe.response.update({"ok": True, "data": doc.name}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def upload_cfg(name, host=None, id=None): ''' Download IOT Device CFG, data example: {"host": "ioe.symgrid.com"} host is optional :return: ''' try: valid_auth_code() doc = frappe.get_doc('IOT Device', name) if not doc.has_permission("write"): throw("has_no_permission") data = {} if host is not None: data.update({"host": host}) ret = fire_action(id=id, action="cfg/upload", gateway=name, data=data) frappe.response.update({ "ok": True, "data": ret }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def add_user(name, user, role='Admin'): try: valid_auth_code() if 'Company Admin' not in frappe.get_roles(): throw("not_permitted") group = frappe.get_doc("Cloud Company Group", name) user_comp = frappe.get_value("Cloud Employee", user, "company") if user_comp and user_comp != group.company: throw("user_in_another_company") if group.group_name == "root" and user_comp is None: doc = frappe.get_doc({"doctype": "Cloud Employee", "user": user, "company": group.company}) doc.insert(ignore_permissions=True) group.add_users(role, user) frappe.response.update({ "ok": True, "message": "user_added" }) except Exception as ex: frappe.response.update({ "ok": False, "error": str(ex) })
def update(name, email, phone, first_name, last_name, username=None, mobile_no=None): try: if 'Guest' == frappe.session.user: throw("has_no_permission") user = frappe.get_doc("User", name) user.update({ "email": email, "phone": phone, "first_name": first_name, "last_name": last_name }) if username: user.update({"username": username}) if mobile_no: user.update({"mobile_no": mobile_no}) user.save() frappe.response.update({"ok": True, "info": "user_info_updated"}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def install(gateway, app, version, inst, conf, id=None, from_web=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") data = {"inst": inst, "name": app, "version": version, "conf": conf} if from_web is not None: data.update({"from_web": 1}) ret = fire_action(id=id, action="install", gateway=gateway, data=data) frappe.get_doc({ "doctype": "IOT Application Statistics", "app": app, "device": gateway, "version": version, "action": 'INSTALL', "owner_company": doc.company, "owner_type": doc.owner_type, "owner_id": doc.owner_id, }).insert() frappe.response.update({"ok": True, "data": ret}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def gateway_device_info(gateway=None, device=None): doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("read"): throw("has_no_permission") client = redis.Redis.from_url(IOTHDBSettings.get_redis_server() + "/10", decode_responses=True) return json.loads(client.get(device or gateway) or "{}")
def gateway_device_list(gateway=None): doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("read"): throw("has_no_permission") client = redis.Redis.from_url(IOTHDBSettings.get_redis_server() + "/11", decode_responses=True) return client.lrange(gateway, 0, -1)
def valid_conf_owner(conf): if frappe.session.user == 'Administrator': return if "App Manager" in frappe.get_roles(): return if frappe.get_value('IOT Application Conf', conf, 'developer') != frappe.session.user: throw("has_no_permission")
def read(name): try: valid_auth_code() device = frappe.get_doc('IOT Device', name) if not device.has_permission("read"): throw("has_no_permission") frappe.response.update({"ok": True, "data": as_dict(device)}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def read(name): try: valid_auth_code() doc = frappe.get_doc("IOT Device Share", name) if doc.has_permission("write"): throw("has_no_permission") frappe.response.update({"ok": True, "data": as_dict(doc)}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def save_app_icon(app, f): fname = secure_filename(repr(f.filename)) ext = fname.rsplit('.', 1)[1].lower() # 获取文件后缀 if ext not in ['png', 'PNG']: throw("icon_must_be_png_file") file_path = os.path.join(get_app_release_path(app), "icon.png") f.save(file_path) # 保存文件到upload目录 return "/files/app_center_files/" + app + "/icon.png"
def list_company_shared_groups(company): # if 'Company Admin' not in frappe.get_roles(): # return [] if company not in list_user_companies(frappe.session.user): throw("you_are_not_in_this_company") return [ d[0] for d in frappe.db.get_values("IOT Share Group", {"company": company}, "name") ]
def list(): try: valid_auth_code() if not True: throw("has_no_permission") frappe.response.update({ "ok": True, }) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def upgrade_ack(name, id=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', name) if not doc.has_permission("write"): throw("has_no_permission") ret = fire_action(id=id, action="upgrade/ack", gateway=name, data={}) frappe.response.update({"ok": True, "data": ret}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def remove(name): try: valid_auth_code() # TODO: remove application not implemented so far throw("contact_admin") frappe.response.update({ "ok": True, }) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def refresh(gateway, id=None): try: valid_auth_code() doc = frappe.get_doc('IOT Device', gateway) if not doc.has_permission("write"): throw("has_no_permission") ret = fire_action(id=id, action="ext/list", gateway=gateway, data={}) frappe.response.update({"ok": True, "data": ret}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def login(username, password): try: try: frappe.local.login_manager.authenticate(username, password) except Exception as ex: throw("username_password_not_matched") frappe.local.login_manager.post_login() token = frappe.sessions.get_csrf_token() frappe.db.commit() companies = list_user_companies(username) groups = list_user_groups(username) doc = frappe.get_doc("User", frappe.session.user) is_admin = 0 if 'Company Admin' in frappe.get_roles(): is_admin = 1 frappe.response.update({ "ok": True, "data": { "name": frappe.session.user, "username": doc.username, "csrf_token": token, "groups": groups, "companies": companies, "email": doc.email, "phone": doc.phone, "mobile_no": doc.mobile_no, "first_name": doc.first_name, "last_name": doc.last_name, "is_admin": is_admin, "is_developer": frappe.get_value("App Developer", frappe.session.user, "enabled") } }) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def remove(name): try: if frappe.request.method != "POST": throw("method_must_be_post") frappe.delete_doc("IOT Application Comment", name) frappe.response.update({ "ok": True, "data": "application_comment_deleted" }) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def update(): try: valid_auth_code() data = get_post_json_data() companies = list_admin_companies(frappe.session.user) if frappe.get_value("IOT Application", data.get('name'), 'company') not in companies: throw("invalid_permission") update_doc("IOT Application", data) frappe.response.update({"ok": True, "message": "application_updated"}) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})
def remove(name): try: valid_auth_code() if 'Company Admin' not in frappe.get_roles(): throw("only_admin_can_remove_employee") frappe.delete_doc("Cloud Employee", name) frappe.response.update({ "ok": True, "message": "company_employee_updated" }) except Exception as ex: frappe.response.update({"ok": False, "error": str(ex)})