-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclient.js
107 lines (100 loc) · 2.92 KB
/
client.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
const loginForm = document.getElementById('login-form')
const contentContainer = document.getElementById('content-container')
const searchForm = document.getElementById('search-form')
const baseEndpoint = 'http://localhost:8000/api'
if (loginForm) {
loginForm.addEventListener('submit', handleLogin)
}
if (searchForm){
searchForm.addEventListener('submit', getProductList)
}
console.log(searchForm)
function handleLogin(event) {
event.preventDefault()
const loginEndpoint = `${baseEndpoint}/auth/token/`
let loginFormData = new FormData(loginForm)
let loginObjectData = Object.fromEntries(loginFormData)
const options = {
method: 'POST',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify(loginObjectData)
}
fetch(loginEndpoint, options).then(response=>{
return response.json()
}).then(authData => {
handleAuthData(authData, getProductList)
})
}
function handleAuthData(authData, callback){
localStorage.setItem('access', authData.access)
localStorage.setItem('refresh', authData.refresh)
if (callback){
callback()
}
}
function isTokenValid(jsonData) {
if (jsonData.code && jsonData.code === 'token_not_valid'){
alert('Войдите в аккаунт снова')
return false
} return true
}
function validateJWTToken(){
const endpoint = `${baseEndpoint}/auth/token/verify/`
const options = {
method: 'POST',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
token: localStorage.getItem('access')
})
}
fetch(endpoint, options)
.then(response=>response.json())
.then(x => {
isTokenValid(x)
})
}
function getFetchOptions(method, body){
return {
method: method === null ? 'GET': method,
headers: {
'content-type': 'application/json',
'Authorization': `Bearer ${localStorage.getItem('access')}`
},
body: body === null ? null: body
}
}
function getProductList(event){
let endpoint = `${baseEndpoint}/products/`
if (event){
event.preventDefault()
let searchFormData = new FormData(searchForm)
let searchData = Object.fromEntries(searchFormData)
searchParams = new URLSearchParams(searchData)
endpoint = `${baseEndpoint}/products/?${searchParams}`
}
const options = {
method: 'GET',
headers: {
'content-type': 'application/json',
}
}
console.log(endpoint)
fetch(endpoint, options)
.then(response=>{
return response.json()
})
.then(data=>{
if (isTokenValid(data)) {
writeInContentContainer(data)
}
})
}
function writeInContentContainer(data) {
if (contentContainer) {
contentContainer.innerHTML = '<pre>' + JSON.stringify(data, null, 4) + '</pre>'
}
}