diff --git a/auth.php b/auth.php new file mode 100644 index 0000000..cc2162b --- /dev/null +++ b/auth.php @@ -0,0 +1,62 @@ + 'error', 'message' => 'Invalid request']; + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $input = json_decode(file_get_contents('php://input'), true); + + $action = $input['action'] ?? ''; + $idToken = $input['idToken'] ?? ''; + + // Initialize Firebase Admin SDK + // IMPORTANT: Replace 'path/to/your/serviceAccountKey.json' with the actual path to your Firebase service account key file. + // This file contains your project's credentials and should be kept secure. + // You can download it from Firebase Console -> Project settings -> Service accounts -> Generate new private key. + try { + $factory = (new Factory())->withServiceAccount(__DIR__ . '/firebase-service-account.json'); + $auth = $factory->createAuth(); + } catch (\Exception $e) { + error_log('Firebase Admin SDK initialization error: ' . $e->getMessage()); + $response = ['status' => 'error', 'message' => 'Server configuration error.']; + echo json_encode($response); + exit; + } + + + if ($action === 'signin' && !empty($idToken)) { + try { + $verifiedIdToken = $auth->verifyIdToken($idToken); + $uid = $verifiedIdToken->claims()->get('sub'); + $email = $verifiedIdToken->claims()->get('email'); + $displayName = $verifiedIdToken->claims()->get('name'); + + $_SESSION['user_id'] = $uid; + $_SESSION['user_email'] = $email; + $_SESSION['user_name'] = $displayName; + $_SESSION['is_logged_in'] = true; + + $response = ['status' => 'success', 'message' => 'Sign-in successful.', 'user' => ['uid' => $uid, 'email' => $email, 'name' => $displayName]]; + } catch (InvalidToken $e) { + $response = ['status' => 'error', 'message' => 'Invalid Firebase ID token.']; + error_log('Firebase ID token verification failed: ' . $e->getMessage()); + } catch (\Exception $e) { + $response = ['status' => 'error', 'message' => 'Authentication failed.']; + error_log('General authentication error: ' . $e->getMessage()); + } + } else if ($action === 'signout') { + session_unset(); + session_destroy(); + $response = ['status' => 'success', 'message' => 'Sign-out successful. Session destroyed.']; + } +} + +echo json_encode($response); +?> diff --git a/firebase-service-account.json b/firebase-service-account.json new file mode 100644 index 0000000..8a1d236 --- /dev/null +++ b/firebase-service-account.json @@ -0,0 +1,29 @@ +{ "type": "service_account", "project_id": "dululu-fe617", "private_key_id": "f994dbe9213123675911cb1556e73579f9a2d5b0", "private_key": "-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDIakeW+EiZZZXx +sbJ2NTkXDk6zbiyUHb3XGsVzfgaTVRIjltV6aFJLKa9qz/hHvUAZn0sr0o95gz+8 +B1bBLVTABS54Sx1flhcCbVIFCZ9s25yDbV2OvL22QG1RjrhUoTMwvLaAW43kud77 +OzS3tlL4pDiv+77jE17fC96VfTlmpRzpIJWdEdMN87UZlsnSdXh7Gp0U0+s6bnTv +5YuB5L38dxPYcsze7s/cbcm1S5sW1eCDWmlX+V4l77AgzJ4RzMoRxGqoN5tykzHR +wRnaX+yu60SkN4rXgubfZdIkTI1+hpsxJtSt5P/etJ/4dxwpyAFZStbAk1EQ0rzu +WZ9Ce+kDAgMBAAECggEABteJb7SiWwCRnBvKQ4z6UMGvf/3y9zmFkGgF7FmoAIai +d0Bt6pYZk/oI+0ThmxQ6saCqMKoEx8KzhvXam5FE01kVXYxjgGWI1yHfAb1y3Bcq +Yn8aiVhMVW/YECLv+ejNf17OfaAHGdxkBS4WniWJ8yyq7MMc6dIVQf1hiACG6sgI +7Mf+ojrtRfKu/H4I6bxsN8OM52qrk0ECFkR+hxwo5TG7XA9AdoG2nsGUyjG5jBaj +pLec9qOo1ohBFx4wojr4r6SPnttMm74BMWH65huS+bfBSoXhTDZMBMNz6TRmjf7o ++/2qLRAMxxAbYyy5JWZSZZNA3aZT347mMwxAczMniQKBgQDn+Q1KLuV7lI3E/Fy6 +EktNR+DPfB/3bTA/9Ssuh7cbTvDBOE/EeS9ETppSvlqh5+JycVhK5GSYi62CFQE4 +2TI/iGv962X1Iw1fRLpSMJQ7caHC8Uj0qdGrU0Bz8D/Ct7oD4J9orLvC4iEOYL5K +6nrX3Pp4yeVBJoME5hSE4wvVCQKBgQDdLHMdicyDkr05VNt8vwoQC3Er9Nw+5zDM +DHADXaEX8W1Qz3xxHKNCsi48ZhMoVGsvgb5SAo9t7RraqhJZKsFB8rDAfqo8WBl7 +TTeWyZM1QX0WIt1pTo2MPWUlT155o73O/dfMuKIkWUdSOGvdjL5OetNcaeVTIlir +4p94mpK8qwKBgHJcKL4aso2jJeUoGLquzCrUNbN0WPoM/U16m4g75fxzhWNsVH7i +03eUXKZQK7RH8i5DTKjXQfSmX6qSmmChSxFhOwQaadBZMH14D3b3dgx8L6hAdZwQ +oEobJ9pAZd6j3vOMaGodRg+ElZFWBlo+kMMcsOqddgURbGQc3Z7JpAqpAoGARawr +80EmeMgv7bCKl+iCXf2MwCEZhINFvvGoE5daGPXHzu4dsHAqCeehYwtwu4KkZUnE +z4bY8fMAQ6PRtd8fFAxEm88LB4llNY9klI6ZXexpilOfVf4V3vi0NSWkiEMJlvwm +D+qVwUeSjRcS+67LgGN206TURfUK49K3E8H1uZMCgYBRXJd64BKViLPUFUJBdmz8 +NHKrnGQiVo57NLx/eXvvvI3/Yd3AGkUdapgkT2sCTHh9aoczgHXcjmlIcho1Q5Jz +0fkUZkjFwuSn5XjPyVDipHA46M+UqHXZ7E88TNisXTzZApj2YhlgUQNQfR8wCDup +Ccwcz12GqS1ZWpK9SoWAFw== +-----END PRIVATE KEY----- +", "client_email": "firebase-adminsdk-fbsvc @dululu-fe617.iam.gserviceaccount.com", "client_id": "104495485400716482072", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-fbsvc%40dululu-fe617.iam.gserviceaccount.com", "universe_domain": "googleapis.com" } \ No newline at end of file diff --git a/includes/firebase_config.php b/includes/firebase_config.php new file mode 100644 index 0000000..399a154 --- /dev/null +++ b/includes/firebase_config.php @@ -0,0 +1,15 @@ + General -> Your apps. + +return [ + 'apiKey' => 'AIzaSyCwEATlIVGKEvm-Ph1oH0-fOySmx7hBYkg', + 'authDomain' => 'dululu-fe617.firebaseapp.com', + 'projectId' => 'dululu-fe617', + 'storageBucket' => 'dululu-fe617.firebasestorage.app', + 'messagingSenderId' => '553086833572', + 'appId' => '1:553086833572:web:2536751230886bd8552731', + 'measurementId' => 'G-5DJ9LXGSZZ' // Optional, if you use Google Analytics for Firebase +]; diff --git a/index.php b/index.php index 5bac7bf..3aacefd 100644 --- a/index.php +++ b/index.php @@ -1,6 +1,9 @@ + + @@ -50,8 +137,9 @@ $projectTitle = 'Delulu is the New Sululu';