( ′∀`)σ≡σ☆))Д′)レ(゚∀゚;)ヘ=З=З=Зε≡(ノ´_ゝ`)ノ HEX
HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux mail.thebrand.ai 6.8.0-107-generic #107-Ubuntu SMP PREEMPT_DYNAMIC Fri Mar 13 19:51:50 UTC 2026 x86_64
User: www-data (33)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/html/tmpr/../tmpr/../tmpr/../tmpr/../tmpr/..//tmpr/../connect/index.php
<?php
require_once __DIR__ . '/auth.php';
$cfg = require __DIR__ . '/config.php';

$redirect = isset($_REQUEST['redirect']) ? trim($_REQUEST['redirect']) : '';
if ($redirect === '') {
    $redirect = '/';
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $email = isset($_POST['email']) ? trim($_POST['email']) : '';
    $password = isset($_POST['password']) ? (string)$_POST['password'] : '';
    $name = isset($_POST['name']) ? trim($_POST['name']) : '';
    if ($email !== '' && $password !== '') {
        // Issue SSO cookie
        $uid = substr(sha1(strtolower($email)), 0, 16);
        $token = issue_token([
            'sub' => $uid,
            'email' => $email,
            'name' => $name,
        ]);
        set_sso_cookie($token);
        ?>
        <!doctype html>
        <html lang="en" class="light-style layout-wide customizer-hide" data-theme="theme-default" data-assets-path="/brandcreator/dashboard/assets/" data-template="vertical-menu-template" data-style="light">
        <head>
            <meta charset="utf-8" />
            <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
            <title>Signing You In | TheBrand</title>
            <link rel="icon" type="image/x-icon" href="https://thebrand.ai/favicon/favicon.ico" />
            <link rel="preconnect" href="https://fonts.googleapis.com/">
            <link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin>
            <link href="https://fonts.googleapis.com/css2?family=Public+Sans:wght@300;400;500;600;700&display=swap" rel="stylesheet">
            <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/fonts/boxicons.css" />
            <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/fonts/fontawesome.css" />
            <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/fonts/flag-icons.css" />
            <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/css/rtl/core.css" />
            <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/css/rtl/theme-default.css" />
            <link rel="stylesheet" href="/brandcreator/dashboard/assets/css/demo.css" />
            <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/css/pages/page-auth.css" />
            <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/libs/animate-css/animate.css" />
            <style>
                .hero-button { box-shadow:none;color:#fff;letter-spacing:-0.02em;background-color:#eb008b;border:0;padding:10px 40px;font-size:20px;border-radius:15px;cursor:pointer;transition:background-color .3s,color .3s,transform .2s ease-out }
                .status { font-size: 13px; }
                .ok { color: #0a7f28; }
                .err { color: #b00020; }
            </style>
        </head>
        <body>
        <div class="authentication-wrapper authentication-cover">
          <a href="/connect/index.php" class="app-brand auth-cover-brand gap-2">
            <span class="app-brand-logo demo"><img src="/brandcreator/files/assets/logo-white3.png" style="max-height:60px"></span>
          </a>
          <div class="authentication-inner row m-0">
            <div class="d-none d-lg-flex col-lg-7 col-xl-8 align-items-center p-5" style="background-image:url('/brandcreator/dashboard/assets/img/illustrations/business-meeting-over-coffee.png');background-size:cover;background-repeat:no-repeat;background-position:bottom;background-color:#9fccde;"></div>
            <div class="d-flex col-12 col-lg-5 col-xl-4 align-items-center authentication-bg p-sm-12 p-6">
              <div class="w-px-520 mx-auto mt-12 pt-5">
                <h4 class="mb-1">Signing you in …</h4>
                <div class="list-group mb-4" style="display: none;">
                  <div class="d-flex justify-content-between py-2"><span class="fw-bold">Insights</span><span id="st-insights" class="status">Initializing…</span></div>
                  <div class="d-flex justify-content-between py-2"><span class="fw-bold">Sites</span><span id="st-sites" class="status">Initializing…</span></div>
                  <div class="d-flex justify-content-between py-2"><span class="fw-bold">Design Templates</span><span id="st-i" class="status">Initializing…</span></div>
                </div>
                <button id="continueBtn" class="btn btn-primary w-100 hero-button" disabled>Continue</button>
                <a class="btn btn-outline-secondary w-100 mt-2" href="/connect/index.php">Back</a>
              </div>
            </div>
          </div>
        </div>
        <script>
        (function(){
            const email = <?php echo json_encode($email); ?>;
            const password = <?php echo json_encode($password); ?>;
            const redirect = <?php echo json_encode($redirect); ?>;
            const statuses = {
                insights: document.getElementById('st-insights'),
                sites: document.getElementById('st-sites'),
                i: document.getElementById('st-i')
            };
            const results = { insights: false, sites: false, i: false };

            function setStatus(id, text, cls) {
                statuses[id].textContent = text;
                statuses[id].className = 'status ' + (cls || '');
            }
            function mark(id, ok, msg){
                results[id] = !!ok;
                setStatus(id, ok ? 'Signed in' : ('Failed: ' + (msg || 'Error')), ok ? 'ok' : 'err');
                const allDone = Object.values(results).every(Boolean);
                document.getElementById('continueBtn').disabled = !allDone;
            }

            function getCookie(name){
                const v = (`; ${document.cookie}`).split(`; ${name}=`);
                if (v.length === 2) return v.pop().split(';').shift();
                return '';
            }
            async function ensureSitesCsrf(){
                try {
                    await fetch('/sites/index.php/accounts/login', { method: 'GET', credentials: 'include' });
                    return getCookie('csrf_cookie_brandsites');
                } catch (e) { return ''; }
            }

            async function logoutAll(){
                try {
                    setStatus('insights', 'Signing out…');
                    setStatus('sites', 'Signing out…');
                    setStatus('i', 'Signing out…');
                    await Promise.allSettled([
                        fetch('/insights/auth-logout.php', { credentials: 'include' }),
                        fetch('/sites/index.php/logout', { credentials: 'include' }),
                        fetch('/i/logout', { credentials: 'include' })
                    ]);
                } catch (e) {}
            }

            async function loginInsights(){
                try {
                    setStatus('insights', 'Signing in…');
                    const resp = await fetch('/insights/data/files/login.php', {
                        method: 'POST',
                        headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
                        credentials: 'include',
                        body: new URLSearchParams({ email, password })
                    });
                    const ct = resp.headers.get('content-type') || '';
                    if (ct.includes('application/json')) {
                        const data = await resp.json();
                        if (data && data.success) return mark('insights', true);
                        return mark('insights', false, data && data.message);
                    }
                    return mark('insights', resp.ok);
                } catch (e) { return mark('insights', false, e.message); }
            }

            async function loginSites(){
                try {
                    setStatus('sites', 'Signing in…');
                    const resp = await fetch('/sites/index.php/authenticate/verifyLogin', {
                        method: 'POST',
                        headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest' },
                        credentials: 'include',
                        body: new URLSearchParams({ ppl_email: email, ppl_pass: password })
                    });
                    const bodyText = await resp.text();
                    let data = null;
                    try {
                        data = JSON.parse(bodyText);
                    } catch (e) {}
                    const msg = data && data.message ? String(data.message) : bodyText;
                    if (data && data.status === 'success') {
                        try { await fetch('/sites/index.php/accounts/splashPage', { credentials: 'include' }); } catch (e) {}
                        return mark('sites', true);
                    }
                    const lowerMsg = (msg || '').toLowerCase();
                    if (lowerMsg.indexOf('invalid credentials') !== -1) {
                        setStatus('sites', 'Creating account…');
                        const token = getCookie('csrf_cookie_brandsites') || await ensureSitesCsrf();
                        const signupResp = await fetch('/sites/index.php/authenticate/verifySignUp', {
                            method: 'POST',
                            headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest' },
                            credentials: 'include',
                            body: new URLSearchParams({
                                pps_name: email.split('@')[0],
                                pps_email: email,
                                pps_password: password,
                                csrf_brandsites: token
                            })
                        });
                        const signupText = await signupResp.text();
                        let signupData = null;
                        try {
                            signupData = JSON.parse(signupText);
                        } catch (e) {}
                        if (signupData && signupData.status === 'success') {
                            setStatus('sites', 'Retrying sign in…');
                            const resp2 = await fetch('/sites/index.php/authenticate/verifyLogin', {
                                method: 'POST',
                                headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest' },
                                credentials: 'include',
                                body: new URLSearchParams({ ppl_email: email, ppl_pass: password })
                            });
                            const bodyText2 = await resp2.text();
                            let data2 = null;
                            try {
                                data2 = JSON.parse(bodyText2);
                            } catch (e) {}
                            if (data2 && data2.status) {
                                const ok = data2.status === 'success';
                                if (ok) { try { await fetch('/sites/index.php/accounts/splashPage', { credentials: 'include' }); } catch (e) {} }
                                return mark('sites', ok, data2.message);
                            }
                            return mark('sites', resp2.ok);
                        }
                        if (signupData && signupData.message) {
                            return mark('sites', false, signupData.message);
                        }
                        return mark('sites', signupResp.ok, signupResp.ok ? '' : 'Signup failed');
                    }
                    setStatus('sites', 'Provisioning user…');
                    const prov = await fetch('/connect/provision_sites.php', {
                        method: 'POST',
                        headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
                        body: new URLSearchParams({ email: email, password: password })
                    });
                    const provText = await prov.text();
                    let pjson = null;
                    try {
                        pjson = JSON.parse(provText);
                    } catch (e) {}
                    if (pjson && pjson.debug) { try { console.info('Sites provision debug:', pjson.debug); } catch (e) {} }
                    if (pjson && pjson.success) {
                        setStatus('sites', 'Retrying sign in…');
                        const resp2 = await fetch('/sites/index.php/authenticate/verifyLogin', {
                            method: 'POST',
                            headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest' },
                            credentials: 'include',
                            body: new URLSearchParams({ ppl_email: email, ppl_pass: password })
                        });
                        const bodyText2 = await resp2.text();
                        let data2 = null;
                        try {
                            data2 = JSON.parse(bodyText2);
                        } catch (e) {}
                        if (data2 && data2.status) {
                            const ok = data2.status === 'success';
                            if (ok) { try { await fetch('/sites/index.php/accounts/splashPage', { credentials: 'include' }); } catch (e) {} }
                            return mark('sites', ok, data2.message);
                        }
                        return mark('sites', resp2.ok);
                    }
                    return mark('sites', false, (pjson && pjson.message) || 'Provisioning failed');
                } catch (e) { return mark('sites', false, e.message); }
            }

            async function loginI(){
                try {
                    setStatus('i', 'Signing in…');
                    const resp = await fetch('/i/auth_controller/login_post', {
                        method: 'POST',
                        headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest' },
                        credentials: 'include',
                        body: new URLSearchParams({ email: email, password: password, sys_lang_id: '1' })
                    });
                    const ct = resp.headers.get('content-type') || '';
                    if (ct.includes('application/json')) {
                        const data = await resp.json();
                        if (data && (data.result === 1 || data.success)) return mark('i', true);
                        return mark('i', false, (data && (data.error || data.message)));
                    }
                    return mark('i', resp.ok);
                } catch (e) { return mark('i', false, e.message); }
            }

            (async function(){
                await logoutAll();
                await loginInsights();
                await loginI();
                await loginSites();
            })();

            document.getElementById('continueBtn').addEventListener('click', function(){
                window.location.href = redirect;
            });
        })();
        </script>
        </body>
        </html>
        <?php
        exit;
    }
}

$user = current_user();
?>
<!doctype html>
<html lang="en" class="light-style layout-wide customizer-hide" data-theme="theme-default" data-assets-path="/brandcreator/dashboard/assets/" data-template="vertical-menu-template" data-style="light">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
    <title>Unified Sign In | TheBrand</title>
    <link rel="icon" type="image/x-icon" href="https://thebrand.ai/favicon/favicon.ico" />
    <link rel="preconnect" href="https://fonts.googleapis.com/">
    <link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Public+Sans:wght@300;400;500;600;700&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/fonts/boxicons.css" />
    <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/fonts/fontawesome.css" />
    <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/fonts/flag-icons.css" />
    <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/css/rtl/core.css" />
    <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/css/rtl/theme-default.css" />
    <link rel="stylesheet" href="/brandcreator/dashboard/assets/css/demo.css" />
    <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/css/pages/page-auth.css" />
    <link rel="stylesheet" href="/brandcreator/dashboard/assets/vendor/libs/animate-css/animate.css" />
    <style>
        .hero-button { box-shadow:none;color:#fff;letter-spacing:-0.02em;background-color:#eb008b;border:0;padding:10px 40px;font-size:20px;border-radius:15px;cursor:pointer;transition:background-color .3s,color .3s,transform .2s ease-out }
        #bgX { background-image:url('/brandcreator/dashboard/assets/img/illustrations/business-meeting-over-coffee.png');background-size:cover;background-repeat:no-repeat;background-position:bottom;background-color:#9fccde;height:100vh;margin:0 }
        .gsi-material-button{background-color:#fff;border:1px solid #747775;border-radius:20px;box-sizing:border-box;color:#1f1f1f;cursor:pointer;font-family:'Roboto',arial,sans-serif;font-size:14px;height:40px;letter-spacing:.25px;outline:none;overflow:hidden;padding:0 12px;text-align:center;transition:background-color .218s,border-color .218s,box-shadow .218s;vertical-align:middle;white-space:nowrap;width:auto;max-width:400px}
        .gsi-material-button-content{display:flex;align-items:center;justify-content:flex-start;height:100%}
        .gsi-material-button-icon{height:20px;width:20px}
        .gsi-material-button-contents{flex-grow:1;text-align:center}
        .app-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:12px}
        .app-card{display:flex;align-items:center;justify-content:center;padding:16px;border:1px solid #e3e5e7;border-radius:12px;text-decoration:none;color:#1f1f1f;background:#fff;transition:box-shadow .2s,transform .1s}
        .app-card:hover{box-shadow:0 2px 12px rgba(0,0,0,.08);transform:translateY(-1px)}
        .app-card i{font-size:22px;margin-right:8px}
        .app-card span{font-weight:600}
    </style>
 <script>
  function googleSignIn() {
    const redirect = <?php echo json_encode($redirect); ?>;
    const url = '/connect/auth-google.php?redirect=' + encodeURIComponent(redirect);

    // Force redirect on the top-most window (parent page)
    if (window.top) {
      window.top.location.href = url;
    } else {
      window.location.href = url;
    }
  }
</script>

  </head>
  <body>
  <div class="authentication-wrapper authentication-cover">
    <a href="/connect/index.php" class="app-brand auth-cover-brand gap-2">
      <span class="app-brand-logo demo"><img src="/brandcreator/files/assets/logo-white3.png" style="max-height:60px"></span>
    </a>
    <div class="authentication-inner row m-0">
      <div class="d-none d-lg-flex col-lg-7 col-xl-8 align-items-center p-5" id="bgX"></div>
      <div class="d-flex col-12 col-lg-5 col-xl-4 align-items-center authentication-bg p-sm-12 p-6">
        <div class="w-px-400 mx-auto mt-12 pt-5">
          <h4 class="mb-1">Welcome Back to Brand AI👋</h4>
          <p class="mb-6">Log in to access your brand identity, AI-powered insights, design tools, and more — all in one place.</p>

          <?php if ($user): ?>
            <div class="alert alert-info">Signed in as <strong><?php echo htmlspecialchars($user['email']); ?></strong></div>
            <div class="app-grid">
              <a class="app-card" target="_parent" href="/insights/"><i class="bx bx-line-chart"></i><span>Insights</span></a>
              <a class="app-card" target="_parent" href="/sites/"><i class="bx bx-globe"></i><span>Sites</span></a>
              <a class="app-card" target="_parent" href="/brandcreator/"><i class="bx bx-paint"></i><span>BrandCreator</span></a>
              <a class="app-card" target="_parent" href="/i/"><i class="bx bx-image"></i><span>Templates</span></a>
               <a class="app-card" target="_parent" href="/"><i class="bx bx-home"></i><span>Home</span></a>
               <a class="app-card" target="_parent"  href="/blogs"><i class="bx bx-edit"></i><span>Blogs</span></a>
            </div>
            <a class="btn btn-outline-secondary w-100 mt-3" href="/connect/logout.php?redirect=<?php echo urlencode($redirect); ?>">Sign out</a>
          <?php else: ?>
          <form id="formAuthentication" class="mb-6" method="POST" action="/connect/index.php">
            <input type="hidden" name="redirect" value="<?php echo htmlspecialchars($redirect); ?>">
            <div class="mb-6">
              <label for="email" class="form-label">Email address</label>
              <input type="email" class="form-control" id="email" name="email" placeholder="you@example.com" autofocus required>
            </div>
            <div class="mb-6 form-password-toggle">
              <label class="form-label" for="password">Password</label>
              <div class="input-group input-group-merge">
                <input type="password" id="password" class="form-control" name="password" placeholder="&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;&#xb7;" aria-describedby="password" required />
                <span class="input-group-text cursor-pointer"><i class="bx bx-hide"></i></span>
              </div>
            </div>
            <button class="btn btn-primary d-grid w-100 hero-button" type="submit">Sign In</button>
          </form>

          <div class="divider my-6"><div class="divider-text">or</div></div>

          <button type="button" class="gsi-material-button w-100" onclick="googleSignIn()">
            <div class="gsi-material-button-content">
              <img class="gsi-material-button-icon" src="https://www.gstatic.com/images/branding/googleg/1x/googleg_standard_color_128dp.png" alt="Google" />
              <span class="gsi-material-button-contents">Continue with Google</span>
            </div>
          </button>
          <div class="text-center mt-4">
            <span>New here?</span>
            <a href="/connect/register.php">Sign up for free</a>
          </div>
          <?php endif; ?>

        </div>
      </div>
    </div>
  </div>

  <div class="container mt-4" style="max-width:720px; display:none; visibility:hidden">
    <div class="row g-2">
      <div class="col-6"><a class="btn btn-outline-primary w-100" href="/insights/">Go to Insights</a></div>
      <div class="col-6"><a class="btn btn-outline-primary w-100" href="/sites/">Go to Sites</a></div>
      <div class="col-6"><a class="btn btn-outline-primary w-100" href="/brandcreator/">Go to BrandCreator</a></div>
      <div class="col-6"><a class="btn btn-outline-primary w-100" href="/i/">Go to I</a></div>
      <div class="col-6"><a class="btn btn-outline-secondary w-100" href="/connect/index.php?redirect=/insights/">Sign then Insights</a></div>
      <div class="col-6"><a class="btn btn-outline-secondary w-100" href="/connect/index.php?redirect=/sites/">Sign then Sites</a></div>
      <div class="col-6"><a class="btn btn-outline-secondary w-100" href="/connect/index.php?redirect=/brandcreator/">Sign then BrandCreator</a></div>
      <div class="col-6"><a class="btn btn-outline-secondary w-100" href="/connect/index.php?redirect=/i/">Sign then I</a></div>
    </div>
  </div>

  </body>
  </html>