parent
9b71768423
commit
004672e71d
@ -0,0 +1,118 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="stylesheet" href="../../common.css">
|
||||
<link rel="stylesheet" href="../style.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="icon" type="image/x-icon" href="../../resources/fm-logo.png">
|
||||
<title>Big Brother</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
function activation() {
|
||||
if(activationState) {
|
||||
var button = document.createElement('button');
|
||||
button.textContent = 'Deactivate';
|
||||
button.id = 'logButton';
|
||||
button.className = 'activate-button';
|
||||
document.getElementById('bb-content').appendChild(button);
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
var redirectButton = document.getElementById("logButton");
|
||||
|
||||
redirectButton.addEventListener("click", function() {
|
||||
const params = {
|
||||
code: urlParams.get('code'),
|
||||
state: urlParams.get('state')
|
||||
};
|
||||
const options = {
|
||||
method: 'POST',
|
||||
body: JSON.stringify( params )
|
||||
};
|
||||
fetch('https://codefirst.iut.uca.fr/containers/felixmielcarek-bigbrotherwebapp/settings/deactivate', options )
|
||||
|
||||
const queryUrl = new URL("https://felixmielcarek.github.io/big-brother/");
|
||||
window.location.href = queryUrl.href;
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<div class="main-content">
|
||||
<div class="top-content">
|
||||
<div class="top-text">
|
||||
<div class="top-title">Big Brother</div>
|
||||
<div class="top-description">Never forget again a good album with your Big Brother !</div>
|
||||
</div>
|
||||
|
||||
<a href="../">
|
||||
<img class="top-logo" src="../../resources/fm-logo.png"/>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="bb-content" class="bb-content">
|
||||
<div>
|
||||
<div>If you have liked at least 60% of the track of an album:</div>
|
||||
<div>
|
||||
<ol>
|
||||
<li>add the album to your library</li>
|
||||
<li>removes the tracks from your Liked Songs playlist</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div class="activated-status">
|
||||
<script>
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
let activationState = false;
|
||||
|
||||
if(urlParams.has('error')) {
|
||||
console.log('Error: ' + urlParams.get('error'));
|
||||
document.write('Activation error');
|
||||
}
|
||||
else {
|
||||
const localState = localStorage.getItem("bigbrother-state") ?? "";
|
||||
if(localState.localeCompare(urlParams.get('state')) !=0 ) {
|
||||
console.log('Spotify state error');
|
||||
document.write('Activation error');
|
||||
}
|
||||
else {
|
||||
let activationState = true;
|
||||
document.write('Activated');
|
||||
|
||||
const params = {
|
||||
code: urlParams.get('code'),
|
||||
state: urlParams.get('state')
|
||||
};
|
||||
const options = {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify( params )
|
||||
};
|
||||
fetch('https://codefirst.iut.uca.fr/containers/felixmielcarek-bigbrotherserver/', options )
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok ' + response.statusText);
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
console.log(data);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('There was a problem with the fetch operation:', error);
|
||||
});
|
||||
}
|
||||
}
|
||||
activation();
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<div class="me">Me.</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,69 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="icon" type="image/x-icon" href="./resources/fm-logo.png">
|
||||
<title>Big Brother</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="main-content">
|
||||
<div class="top-content">
|
||||
<div class="top-text">
|
||||
<div class="top-title">Big Brother</div>
|
||||
<div class="top-description">Never forget again a good album with your Big Brother !</div>
|
||||
</div>
|
||||
|
||||
<img class="top-logo" src="./resources/fm-logo.png"/>
|
||||
</div>
|
||||
|
||||
<div class="bb-content">
|
||||
<div>
|
||||
<div>If you have liked at least 60% of the track of an album:</div>
|
||||
<div>
|
||||
<ol>
|
||||
<li>add the album to your library</li>
|
||||
<li>removes the tracks from your Liked Songs playlist</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<button id="logButton" class="activate-button">Activate</button>
|
||||
|
||||
<script>
|
||||
function generateRandomString(length) {
|
||||
const charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
||||
let randomString = '';
|
||||
for (let i = 0; i < length; i++) {
|
||||
const randomIndex = Math.floor(Math.random() * charset.length);
|
||||
randomString += charset[randomIndex];
|
||||
}
|
||||
return randomString;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
var redirectButton = document.getElementById("logButton");
|
||||
|
||||
redirectButton.addEventListener("click", function() {
|
||||
const state = generateRandomString(16);
|
||||
const queryUrl = new URL("https://accounts.spotify.com/authorize");
|
||||
queryUrl.searchParams.append("response_type", "code");
|
||||
queryUrl.searchParams.append("state", state);
|
||||
queryUrl.searchParams.append("client_id", "5ec7f30903414033a3381995754da3e8");
|
||||
queryUrl.searchParams.append("scope", "user-read-private user-read-email user-library-read user-library-modify");
|
||||
queryUrl.searchParams.append("redirect_uri", "big-brother-two.vercel.app:3000/callback");
|
||||
|
||||
localStorage.setItem("bigbrother-state", state);
|
||||
|
||||
window.location.href = queryUrl.href;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<div class="me">Me.</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
After Width: | Height: | Size: 16 KiB |
@ -0,0 +1,101 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@500&display=swap');
|
||||
|
||||
html, body {
|
||||
font-family: 'Montserrat', sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0px;
|
||||
background-color: black;
|
||||
color: white;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
min-height: 100vh;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer {
|
||||
height: 80px;
|
||||
width: 100%;
|
||||
background-color: #0d0d0d;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.me {
|
||||
margin: auto;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.top-content {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin-top: 50px;
|
||||
margin-bottom: 100px;
|
||||
width: 80%;
|
||||
margin-inline: auto;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.top-text {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
max-width: 55%;
|
||||
}
|
||||
|
||||
.top-title {
|
||||
font-size: 40px;
|
||||
margin-block: 20px;
|
||||
}
|
||||
|
||||
.top-description {
|
||||
font-size: 20px;
|
||||
color: #BDBDBD;
|
||||
}
|
||||
|
||||
.top-logo {
|
||||
max-height: 100px;
|
||||
}
|
||||
|
||||
.bb-content {
|
||||
font-size: 20px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.activate-button {
|
||||
color: inherit;
|
||||
border: none;
|
||||
font: inherit;
|
||||
cursor: pointer;
|
||||
|
||||
margin-top: 40px;
|
||||
padding-inline: 20px;
|
||||
padding-block: 10px;
|
||||
background-color: #1db954;
|
||||
border-radius: 40px;
|
||||
}
|
||||
|
||||
.activate-button:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.activated-status {
|
||||
margin-top: 40px;
|
||||
padding-inline: 20px;
|
||||
padding-block: 10px;
|
||||
background-color: #0d0d0d;
|
||||
border-radius: 40px;
|
||||
}
|
Loading…
Reference in new issue