Exemple #1
0
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)})
Exemple #2
0
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)})
Exemple #3
0
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)})
Exemple #4
0
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)
		})
Exemple #5
0
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)
		})
Exemple #6
0
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")
Exemple #8
0
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)})
Exemple #9
0
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)})
Exemple #10
0
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)})
Exemple #12
0
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)
		})
Exemple #13
0
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)
		})
Exemple #14
0
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)})
Exemple #15
0
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)})
Exemple #16
0
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 "{}")
Exemple #17
0
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)
Exemple #18
0
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")
Exemple #19
0
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)})
Exemple #20
0
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)})
Exemple #21
0
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)})
Exemple #24
0
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)})
Exemple #25
0
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)})
Exemple #26
0
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)})
Exemple #27
0
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)})
Exemple #28
0
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)})
Exemple #30
0
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)})