Beispiel #1
0
    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)
Beispiel #2
0
    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))
Beispiel #3
0
    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})
Beispiel #4
0
    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("未登录")
Beispiel #5
0
    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})
Beispiel #6
0
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)