def get(self, request): user = request.user #print("username:"******"user id:", user.id) data = [] # get all for serverid in ClientWg.objects.filter( user__username=user.username).values("server").distinct(): server = ServerWg.objects.get(id=serverid["server"]) info = {} info["serverid"] = server.id info["serverwg"] = server.iface info["address"] = server.address info["ip"] = server.ip info["publickey"] = server.publickey info["ifaces"] = [] for peer in ClientWg.objects.filter(user__username=user.username, server=server): iface = funcs.clientwg2json(peer) info["ifaces"].append(iface) data.append(info) return funcs.res(data)
def get(self, request): iface = request.GET.get("iface", "") if iface == "": l = [] for queryset in ServerWg.objects.all(): l.append(funcs.serverwg2json(queryset)) return funcs.res(l) else: #print(f"查{iface}接口信息.") try: iface = ServerWg.objects.get(iface=iface) except ServerWg.DoesNotExist: return funcs.reserr(f"没有{iface}接口") return funcs.res(funcs.serverwg2json(iface))
def get(self, req): auth = req.user if not auth.is_authenticated: return json({"code": 302, "router": "login"}) return res({"userid": auth.id, "username": auth.username})
def get(self, req): if not settings.DEBUG: if req.user.username == "easywg" and req.user.password == "easywg": print("首次登录请修改初始密码。") return json({"code": 302, "router": "/accounts/chpassword/"}) if req.user.is_authenticated: return res({ "username": req.user.username, "serupuser": req.user.is_superuser }) else: return reserr("未登录")
def post(self, req): js = req.META["WG_BODY"] username = js.get("un") password = js.get("pw") auth = authenticate(username=username, password=password) if auth is None: return reserr("用户名或密码错误") else: login(req, auth) if not settings.DEBUG: if username == "easywg" and password == "easywg": return json({ "code": 302, "router": "/accounts/chpassword/" }) return res({"username": username, "superuser": auth.is_superuser})
def serverwg_add(wg): i = {} iface = wg.get("iface", "") if iface: if ServerWg.objects.filter(iface=iface): return funcs.reserr(f"接口名: {iface} 已存在。") else: i["iface"] = iface else: # 如果 iface 为空 就自动生成 suffix = ServerWg.objects.aggregate(Max("id")).get("id__max") if suffix: p = 1 tmp = "easywg" + str(suffix + p) while ServerWg.objects.filter(iface=tmp): p += 1 tmp = "easywg" + str(suffix + p) i["iface"] = tmp else: i["iface"] = "easywg0" address = wg.get("address", "") if address == "": return funcs.reserr("address 是必须的") else: i["address"] = address network = wg.get("network", "") if network == "": return funcs.reserr("network 是必须的") else: if ServerWg.objects.filter(network=network): return funcs.reserr(f"network {network} 已存在!") else: i["network"] = network i["ip"] = funcs.gateway(i["network"]) prikey = wg.get("privatekey") if not prikey: i["privatekey"] = wgcmd.genkey() i["publickey"] = wgcmd.pubkey(i["privatekey"]) else: try: i["publickey"] = wgcmd.pubkey(prikey) except Exception: return funcs.reserr("privatekey 长度不对或格式不正确") i["privatekey"] = prikey i["persistentkeepalive"] = wg.get("persistentkeepalive", 35) i["boot"] = wg.get("boot", True) i["comment"] = wg.get("comment", "") lp = wg.get("listenport", "") if lp == "": lp = ServerWg.objects.aggregate( Max("listenport")).get("listenport__max") if lp: i["listenport"] = lp + 1 else: i["listenport"] = 8324 else: try: listenport = int(lp) except Exception: return funcs.reserr("listenport 必须是 8324 ~ 65535 的数") if ServerWg.objects.filter(listenport=listenport): return funcs.reserr(f"listenport {lp} 冲突") else: i["listenport"] = listenport print("添加一个接口:", i) wgserver = ServerWg(**i) try: funcs.debug(wgcmd.add_wg, wgserver.iface, wgserver.ip) funcs.debug(wgcmd.wg_set, wgserver.iface, wgserver.privatekey, wgserver.listenport) except CalledProcessError: return funcs.reserr(f"添加接口 {wgserver.iface} 失败!") wgserver.save() i["id"] = wgserver.id return funcs.res(i)