mirror of https://github.com/wg-easy/wg-easy
committed by
Sergei Birukov
2 changed files with 115 additions and 114 deletions
@ -0,0 +1,114 @@ |
|||
export default class API { |
|||
async call({ method, path, body }) { |
|||
const res = await fetch(`./api${path}`, { |
|||
method, |
|||
headers: { |
|||
'Content-Type': 'application/json', |
|||
}, |
|||
body: body ? JSON.stringify(body) : undefined, |
|||
}); |
|||
|
|||
if (res.status === 204) { |
|||
return undefined; |
|||
} |
|||
|
|||
const json = await res.json(); |
|||
|
|||
if (!res.ok) { |
|||
throw new Error(json.error || res.statusText); |
|||
} |
|||
|
|||
return json; |
|||
} |
|||
|
|||
async getRelease() { |
|||
return this.call({ |
|||
method: 'get', |
|||
path: '/release', |
|||
}); |
|||
} |
|||
|
|||
async getSession() { |
|||
return this.call({ |
|||
method: 'get', |
|||
path: '/session', |
|||
}); |
|||
} |
|||
|
|||
async createSession({ password }) { |
|||
return this.call({ |
|||
method: 'post', |
|||
path: '/session', |
|||
body: { password }, |
|||
}); |
|||
} |
|||
|
|||
async deleteSession() { |
|||
return this.call({ |
|||
method: 'delete', |
|||
path: '/session', |
|||
}); |
|||
} |
|||
|
|||
async getClients() { |
|||
return this.call({ |
|||
method: 'get', |
|||
path: '/wireguard/client', |
|||
}).then((clients) => |
|||
clients.map((client) => ({ |
|||
...client, |
|||
createdAt: new Date(client.createdAt), |
|||
updatedAt: new Date(client.updatedAt), |
|||
latestHandshakeAt: |
|||
client.latestHandshakeAt !== null |
|||
? new Date(client.latestHandshakeAt) |
|||
: null, |
|||
})) |
|||
); |
|||
} |
|||
|
|||
async createClient({ name }) { |
|||
return this.call({ |
|||
method: 'post', |
|||
path: '/wireguard/client', |
|||
body: { name }, |
|||
}); |
|||
} |
|||
|
|||
async deleteClient({ clientId }) { |
|||
return this.call({ |
|||
method: 'delete', |
|||
path: `/wireguard/client/${clientId}`, |
|||
}); |
|||
} |
|||
|
|||
async enableClient({ clientId }) { |
|||
return this.call({ |
|||
method: 'post', |
|||
path: `/wireguard/client/${clientId}/enable`, |
|||
}); |
|||
} |
|||
|
|||
async disableClient({ clientId }) { |
|||
return this.call({ |
|||
method: 'post', |
|||
path: `/wireguard/client/${clientId}/disable`, |
|||
}); |
|||
} |
|||
|
|||
async updateClientName({ clientId, name }) { |
|||
return this.call({ |
|||
method: 'put', |
|||
path: `/wireguard/client/${clientId}/name/`, |
|||
body: { name }, |
|||
}); |
|||
} |
|||
|
|||
async updateClientAddress({ clientId, address }) { |
|||
return this.call({ |
|||
method: 'put', |
|||
path: `/wireguard/client/${clientId}/address/`, |
|||
body: { address }, |
|||
}); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue