summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-ui/src/api
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-web/opendc-web-ui/src/api')
-rw-r--r--opendc-web/opendc-web-ui/src/api/portfolios.js39
-rw-r--r--opendc-web/opendc-web-ui/src/api/prefabs.js39
-rw-r--r--opendc-web/opendc-web-ui/src/api/projects.js39
-rw-r--r--opendc-web/opendc-web-ui/src/api/routes/portfolios.js17
-rw-r--r--opendc-web/opendc-web-ui/src/api/routes/prefabs.js17
-rw-r--r--opendc-web/opendc-web-ui/src/api/routes/projects.js17
-rw-r--r--opendc-web/opendc-web-ui/src/api/routes/scenarios.js17
-rw-r--r--opendc-web/opendc-web-ui/src/api/routes/schedulers.js5
-rw-r--r--opendc-web/opendc-web-ui/src/api/routes/token-signin.js10
-rw-r--r--opendc-web/opendc-web-ui/src/api/routes/topologies.js17
-rw-r--r--opendc-web/opendc-web-ui/src/api/routes/traces.js5
-rw-r--r--opendc-web/opendc-web-ui/src/api/routes/users.js17
-rw-r--r--opendc-web/opendc-web-ui/src/api/scenarios.js39
-rw-r--r--opendc-web/opendc-web-ui/src/api/schedulers.js27
-rw-r--r--opendc-web/opendc-web-ui/src/api/token-signin.js32
-rw-r--r--opendc-web/opendc-web-ui/src/api/topologies.js39
-rw-r--r--opendc-web/opendc-web-ui/src/api/traces.js27
-rw-r--r--opendc-web/opendc-web-ui/src/api/users.js39
18 files changed, 320 insertions, 122 deletions
diff --git a/opendc-web/opendc-web-ui/src/api/portfolios.js b/opendc-web/opendc-web-ui/src/api/portfolios.js
new file mode 100644
index 00000000..6202e702
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/api/portfolios.js
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { request } from './index'
+
+export function addPortfolio(projectId, portfolio) {
+ return request(`projects/${projectId}/portfolios`, 'POST', { portfolio })
+}
+
+export function getPortfolio(portfolioId) {
+ return request(`portfolios/${portfolioId}`)
+}
+
+export function updatePortfolio(portfolioId, portfolio) {
+ return request(`portfolios/${portfolioId}`, 'PUT', { portfolio })
+}
+
+export function deletePortfolio(portfolioId) {
+ return request(`portfolios/${portfolioId}`, 'DELETE')
+}
diff --git a/opendc-web/opendc-web-ui/src/api/prefabs.js b/opendc-web/opendc-web-ui/src/api/prefabs.js
new file mode 100644
index 00000000..a8bd3f3b
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/api/prefabs.js
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { request } from './index'
+
+export function getPrefab(prefabId) {
+ return request(`prefabs/${prefabId}`)
+}
+
+export function addPrefab(prefab) {
+ return request('prefabs', 'POST', { prefab })
+}
+
+export function updatePrefab(prefab) {
+ return request(`prefabs/${prefab._id}`, 'PUT', { prefab })
+}
+
+export function deletePrefab(prefabId) {
+ return request(`prefabs/${prefabId}`, 'DELETE')
+}
diff --git a/opendc-web/opendc-web-ui/src/api/projects.js b/opendc-web/opendc-web-ui/src/api/projects.js
new file mode 100644
index 00000000..9ff7deda
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/api/projects.js
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { request } from './index'
+
+export function getProject(projectId) {
+ return request(`projects/${projectId}`)
+}
+
+export function addProject(project) {
+ return request('projects', 'POST', { project })
+}
+
+export function updateProject(project) {
+ return request(`projects/${project._id}`, 'PUT', { project })
+}
+
+export function deleteProject(projectId) {
+ return request(`projects/${projectId}`, 'DELETE')
+}
diff --git a/opendc-web/opendc-web-ui/src/api/routes/portfolios.js b/opendc-web/opendc-web-ui/src/api/routes/portfolios.js
deleted file mode 100644
index ba15e828..00000000
--- a/opendc-web/opendc-web-ui/src/api/routes/portfolios.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { request } from '../index'
-
-export function addPortfolio(projectId, portfolio) {
- return request(`projects/${projectId}/portfolios`, 'POST', { portfolio })
-}
-
-export function getPortfolio(portfolioId) {
- return request(`portfolios/${portfolioId}`)
-}
-
-export function updatePortfolio(portfolioId, portfolio) {
- return request(`portfolios/${portfolioId}`, 'PUT', { portfolio })
-}
-
-export function deletePortfolio(portfolioId) {
- return request(`portfolios/${portfolioId}`, 'DELETE')
-}
diff --git a/opendc-web/opendc-web-ui/src/api/routes/prefabs.js b/opendc-web/opendc-web-ui/src/api/routes/prefabs.js
deleted file mode 100644
index 032e12bc..00000000
--- a/opendc-web/opendc-web-ui/src/api/routes/prefabs.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { request } from '../index'
-
-export function getPrefab(prefabId) {
- return request(`prefabs/${prefabId}`)
-}
-
-export function addPrefab(prefab) {
- return request('prefabs', 'POST', { prefab })
-}
-
-export function updatePrefab(prefab) {
- return request(`prefabs/${prefab._id}`, 'PUT', { prefab })
-}
-
-export function deletePrefab(prefabId) {
- return request(`prefabs/${prefabId}`, 'DELETE')
-}
diff --git a/opendc-web/opendc-web-ui/src/api/routes/projects.js b/opendc-web/opendc-web-ui/src/api/routes/projects.js
deleted file mode 100644
index cd46036f..00000000
--- a/opendc-web/opendc-web-ui/src/api/routes/projects.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { request } from '../index'
-
-export function getProject(projectId) {
- return request(`projects/${projectId}`)
-}
-
-export function addProject(project) {
- return request('projects', 'POST', { project })
-}
-
-export function updateProject(project) {
- return request(`projects/${project._id}`, 'PUT', { project })
-}
-
-export function deleteProject(projectId) {
- return request(`projects/${projectId}`, 'DELETE')
-}
diff --git a/opendc-web/opendc-web-ui/src/api/routes/scenarios.js b/opendc-web/opendc-web-ui/src/api/routes/scenarios.js
deleted file mode 100644
index 00cc1eb0..00000000
--- a/opendc-web/opendc-web-ui/src/api/routes/scenarios.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { request } from '../index'
-
-export function addScenario(portfolioId, scenario) {
- return request(`portfolios/${portfolioId}/scenarios`, 'POST', { scenario })
-}
-
-export function getScenario(scenarioId) {
- return request(`scenarios/${scenarioId}`)
-}
-
-export function updateScenario(scenarioId, scenario) {
- return request(`scenarios/${scenarioId}`, 'PUT', { scenario })
-}
-
-export function deleteScenario(scenarioId) {
- return request(`scenarios/${scenarioId}`, 'DELETE')
-}
diff --git a/opendc-web/opendc-web-ui/src/api/routes/schedulers.js b/opendc-web/opendc-web-ui/src/api/routes/schedulers.js
deleted file mode 100644
index 5e129d33..00000000
--- a/opendc-web/opendc-web-ui/src/api/routes/schedulers.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import { request } from '../index'
-
-export function getAllSchedulers() {
- return request('schedulers')
-}
diff --git a/opendc-web/opendc-web-ui/src/api/routes/token-signin.js b/opendc-web/opendc-web-ui/src/api/routes/token-signin.js
deleted file mode 100644
index 1c285bdb..00000000
--- a/opendc-web/opendc-web-ui/src/api/routes/token-signin.js
+++ /dev/null
@@ -1,10 +0,0 @@
-export function performTokenSignIn(token) {
- const apiUrl = process.env.NEXT_PUBLIC_API_BASE_URL
-
- return fetch(`${apiUrl}/tokensignin`, {
- method: 'POST',
- body: new URLSearchParams({
- idtoken: token,
- }),
- }).then((res) => res.json())
-}
diff --git a/opendc-web/opendc-web-ui/src/api/routes/topologies.js b/opendc-web/opendc-web-ui/src/api/routes/topologies.js
deleted file mode 100644
index 076895ff..00000000
--- a/opendc-web/opendc-web-ui/src/api/routes/topologies.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { request } from '../index'
-
-export function addTopology(topology) {
- return request(`projects/${topology.projectId}/topologies`, 'POST', { topology })
-}
-
-export function getTopology(topologyId) {
- return request(`topologies/${topologyId}`)
-}
-
-export function updateTopology(topology) {
- return request(`topologies/${topology._id}`, 'PUT', { topology })
-}
-
-export function deleteTopology(topologyId) {
- return request(`topologies/${topologyId}`, 'DELETE')
-}
diff --git a/opendc-web/opendc-web-ui/src/api/routes/traces.js b/opendc-web/opendc-web-ui/src/api/routes/traces.js
deleted file mode 100644
index eb2526ee..00000000
--- a/opendc-web/opendc-web-ui/src/api/routes/traces.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import { request } from '../index'
-
-export function getAllTraces() {
- return request('traces')
-}
diff --git a/opendc-web/opendc-web-ui/src/api/routes/users.js b/opendc-web/opendc-web-ui/src/api/routes/users.js
deleted file mode 100644
index 619aec1f..00000000
--- a/opendc-web/opendc-web-ui/src/api/routes/users.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { request } from '../index'
-
-export function getUserByEmail(email) {
- return request(`users` + new URLSearchParams({ email }))
-}
-
-export function addUser(user) {
- return request('users', 'POST', { user })
-}
-
-export function getUser(userId) {
- return request(`users/${userId}`)
-}
-
-export function deleteUser(userId) {
- return request(`users/${userId}`, 'DELETE')
-}
diff --git a/opendc-web/opendc-web-ui/src/api/scenarios.js b/opendc-web/opendc-web-ui/src/api/scenarios.js
new file mode 100644
index 00000000..9f8c717b
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/api/scenarios.js
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { request } from './index'
+
+export function addScenario(portfolioId, scenario) {
+ return request(`portfolios/${portfolioId}/scenarios`, 'POST', { scenario })
+}
+
+export function getScenario(scenarioId) {
+ return request(`scenarios/${scenarioId}`)
+}
+
+export function updateScenario(scenarioId, scenario) {
+ return request(`scenarios/${scenarioId}`, 'PUT', { scenario })
+}
+
+export function deleteScenario(scenarioId) {
+ return request(`scenarios/${scenarioId}`, 'DELETE')
+}
diff --git a/opendc-web/opendc-web-ui/src/api/schedulers.js b/opendc-web/opendc-web-ui/src/api/schedulers.js
new file mode 100644
index 00000000..7791e51e
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/api/schedulers.js
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2021 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { request } from './index'
+
+export function getAllSchedulers() {
+ return request('schedulers')
+}
diff --git a/opendc-web/opendc-web-ui/src/api/token-signin.js b/opendc-web/opendc-web-ui/src/api/token-signin.js
new file mode 100644
index 00000000..a3761fa1
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/api/token-signin.js
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2021 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+export function performTokenSignIn(token) {
+ const apiUrl = process.env.NEXT_PUBLIC_API_BASE_URL
+
+ return fetch(`${apiUrl}/tokensignin`, {
+ method: 'POST',
+ body: new URLSearchParams({
+ idtoken: token,
+ }),
+ }).then((res) => res.json())
+}
diff --git a/opendc-web/opendc-web-ui/src/api/topologies.js b/opendc-web/opendc-web-ui/src/api/topologies.js
new file mode 100644
index 00000000..e6df73c7
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/api/topologies.js
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { request } from './index'
+
+export function addTopology(topology) {
+ return request(`projects/${topology.projectId}/topologies`, 'POST', { topology })
+}
+
+export function getTopology(topologyId) {
+ return request(`topologies/${topologyId}`)
+}
+
+export function updateTopology(topology) {
+ return request(`topologies/${topology._id}`, 'PUT', { topology })
+}
+
+export function deleteTopology(topologyId) {
+ return request(`topologies/${topologyId}`, 'DELETE')
+}
diff --git a/opendc-web/opendc-web-ui/src/api/traces.js b/opendc-web/opendc-web-ui/src/api/traces.js
new file mode 100644
index 00000000..1c5cfa1d
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/api/traces.js
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2021 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { request } from './index'
+
+export function getAllTraces() {
+ return request('traces')
+}
diff --git a/opendc-web/opendc-web-ui/src/api/users.js b/opendc-web/opendc-web-ui/src/api/users.js
new file mode 100644
index 00000000..3da030ad
--- /dev/null
+++ b/opendc-web/opendc-web-ui/src/api/users.js
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021 AtLarge Research
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+import { request } from './index'
+
+export function getUserByEmail(email) {
+ return request(`users` + new URLSearchParams({ email }))
+}
+
+export function addUser(user) {
+ return request('users', 'POST', { user })
+}
+
+export function getUser(userId) {
+ return request(`users/${userId}`)
+}
+
+export function deleteUser(userId) {
+ return request(`users/${userId}`, 'DELETE')
+}