Skip to content
Snippets Groups Projects
Commit 62858cdd authored by Genvictus's avatar Genvictus
Browse files
parents 110bb00e 5763bb58
Branches
Tags
No related merge requests found
## Panduan Pengerjaan ## Tugas Besar 1 IF3110 Pengembangan Aplikasi Berbasis Web
Berikut adalah hal yang harus diperhatikan untuk pengumpulan tugas ini:
1. Buatlah grup pada Gitlab dengan format "IF3110-2023-01-XX", dengan XX adalah nomor kelompok (untuk K1 dan K2) atau kode kelompok (untuk K3). ### Deskripsi Aplikasi Web
2. Tambahkan anggota tim pada grup anda.
3. **Fork** pada repository ini dengan organisasi yang telah dibuat. Aplikasi web ini merupakan aplikasi web yang digunakan untuk memudahkan pengguna dalam melakukan sesuatu. Selain itu beberapa aplikasi web juga dapat memberikan berbagai informasi. Web yang kami buat adalah web sosial media yang berisi postingan yang dapat berupa teks, video, gambar, ataupun audio. Dalam web ini pengguna dapat melakukan berbagai hal seperti membuat postingan, menghapus postingan, mengedit postingan, dan lain-lain. Selain itu pengguna juga dapat melihat postingan dari pengguna lain.
4. Ubah hak akses repository hasil Fork anda menjadi **private**.
5. Hal-hal yang harus diperhatikan. ### Daftar Requirement
* Silakan commit pada repository anda (hasil fork)
* Lakukan beberapa commit dengan pesan yang bermakna, contoh: “add register form”, “fix logout bug”, jangan seperti “final”, “benerin dikit”, “fix bug”. 1. Pastikan sudah menginstall docker
* Disarankan untuk tidak melakukan commit dengan perubahan yang besar karena akan mempengaruhi penilaian (contoh: hanya melakukan satu commit kemudian dikumpulkan). 2. Jika memungkinkan pastikan sudah menginstall WSL
* Commit dari setiap anggota tim akan mempengaruhi penilaian.
* Jadi, setiap anggota tim harus melakukan commit yang berpengaruh terhadap proses pembuatan aplikasi. ### Cara Instalasi
* Sebagai panduan bisa mengikuti [semantic commit](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716).
6. Buatlah file README yang berisi: 1. Clone repository ini
* Deskripsi aplikasi web 2. Buka terminal dan arahkan ke folder repository yang telah di clone
* Daftar requirement 3. Jika anda memiliki WSL, pertama anda harus menjalankan "bash scripts/build-image.sh" untuk membangun image docker
* Cara instalasi 4. Jika anda tidak memiliki WSL, anda dapat menjalankan "docker build -t tubes-1:latest ." untuk membangun image docker
* Cara menjalankan server
* Screenshot tampilan aplikasi (tidak perlu semua kasus, minimal 1 per halaman), dan ### Cara Menjalankan Server
* Penjelasan mengenai pembagian tugas masing-masing anggota (lihat formatnya pada bagian pembagian tugas).
1. Jalankan "docker compose up" untuk menjalankan aplikasi tunggu container selesai dibangun
2. Setelah container selesai dibangun, buka browser dan akses "localhost:8008"
### Screenshot Tampilan Aplikasi
### Pembagian Tugas
| NIM | Nama | Tugas yang dikerjakan |
| ----------- | ----------- | ----------- |
| 13521098 | Fazel Ginanda | Home dan Post (Server-Client Side) |
| 13521138 | Johann Christian Kandani | Profile, Profile Management (Server-Client Side), Base Classes, Config DB, Setup Docker |
| 13521159 | Sulthan Dzaky Alfaro | Login, Registrasi, dan Admin (Server-Client Side) |
<?php
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, DELETE, PUT, PATCH, OPTIONS');
header('Access-Control-Allow-Headers: token, Content-Type');
header('Access-Control-Max-Age: 1728000');
header('Content-Length: 0');
header('Content-Type: text/plain');
die();
}
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
class LoginRegistrasi{
function connect_db(): PDO{
$host = "localhost";
$dbname = "wbd";
$username = "postgres";
$password = "postgres";
$port = "5432";
$db = new PDO("pgsql:host=$host;dbname=$dbname", $username, $password);
return $db;
}
function login($db){
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$koneksi = $db;
$query = "SELECT * FROM users";
$result = $koneksi->query($query);
$data_database = $result->fetchAll();
$data = json_decode(file_get_contents("php://input"));
$path = $_SERVER['REQUEST_URI'];
if(strpos($path,'/checkloginreg.php/login') !== false){
if(!empty($data->username) && !empty($data->password)){
$username = $data->username;
$password = $data->password;
$get = 0;
for($i=0;$i<count($data_database);$i++){
if($data_database[$i]['username'] === $username && password_verify($password, $data_database[$i]['password_hashed'])){
$response = array("status" => "sukses", "message" => "Login berhasil", "role" => $data_database[$i]['role']);
$get = 1;
header('Content-Type: application/json');
echo json_encode($response);
break;
}
}
if($get == 0){
$response = array("status" => "error", "message" => "Username atau password salah");
header('Content-Type: application/json');
echo json_encode($response);
}
}else{
$response = array("status" => "error", "message" => "Username atau password tidak boleh kosong");
header('Content-Type: application/json');
echo json_encode($response);
}
}
}
}
function registrasi($db){
try{
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$koneksi = $db;
$query = "SELECT * FROM users";
$result = $koneksi->query($query);
$data_database = $result->fetchAll();
$data = json_decode(file_get_contents("php://input"));
$path = $_SERVER['REQUEST_URI'];
if(strpos($path,'/checkloginreg.php/register') !== false){
if(!empty($data->username) && !empty($data->password) && !empty($data->nama)){
$username = $data->username;
$password = $data->password;
$nama = $data->nama;
$get = 0;
for($i=0;$i<count($data_database);$i++){
if($data_database[$i]['username'] == $username){
$response = array("status" => "error", "message" => "Username sudah terdaftar");
$get = 1;
header('Content-Type: application/json');
echo json_encode($response);
break;
}
}
if($get == 0){
$password = password_hash($password, PASSWORD_DEFAULT);
$query = "INSERT INTO users (username, password_hashed, profile_name, role) VALUES ('$username', '$password', '$nama', 'user')";
$result = $koneksi->query($query);
$response = array("status" => "sukses", "message" => "Registrasi berhasil");
header('Content-Type: application/json');
echo json_encode($response);
}
}else{
$response = array("status" => "error", "message" => "Username atau password atau nama tidak boleh kosong");
header('Content-Type: application/json');
echo json_encode($response);
}
}
}
}catch(Exception $e){
echo $e->getMessage();
}
}
}
// $loginregistrasi = new LoginRegistrasi();
// $db = $loginregistrasi->connect_db();
// $loginregistrasi->login($db);
// $loginregistrasi->registrasi($db);
?>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
<link rel="stylesheet" href="login.css">
</head>
<body>
<div class="tepi">
<div class="isi-box login">
<h2>
Login
</h2>
<div>
<div class="input-box">
<span class="icon">
<ion-icon name="people-outline"></ion-icon>
</span>
<input type="text" required id="username">
<label >Username</label>
</div>
<div class="input-box">
<span class="icon">
<ion-icon name="lock-closed-outline"></ion-icon>
</span>
<input type="password" required id="password">
<label >Password</label>
</div>
<button type="submit" class="tmbllogin" id="tmblbuatlogin">
Login
</button>
<div class="register">
<p>Don't have account?<a href="#" class="register-link">Register</a></p>
</div>
</div>
</div>
<div class="isi-box register">
<h2>
Register
</h2>
<div>
<div class="input-box">
<span class="icon">
<ion-icon name="text-outline"></ion-icon>
</span>
<input type="text" required id="namareg">
<label >Name</label>
</div>
<div class="input-box">
<span class="icon">
<ion-icon name="people-outline"></ion-icon>
</span>
<input type="text" required id="userreg">
<label >Username</label>
</div>
<div class="input-box">
<span class="icon">
<ion-icon name="lock-closed-outline"></ion-icon>
</span>
<input type="password" required id="passreg">
<label >Password</label>
</div>
<button type="submit" class="tmbllogin" id="tmblreg">
Register
</button>
<div class="register">
<p>Already have account?<a href="#" class="login-link">Login</a></p>
</div>
</div>
</div>
</div>
<script src="login.js"></script>
<script type="module" src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.esm.js"></script>
<script nomodule src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.js"></script>
</body>
</html>
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment