{"id":2897,"date":"2025-12-27T07:24:00","date_gmt":"2025-12-27T07:24:00","guid":{"rendered":"https:\/\/www.cconnectgh.org\/?page_id=2897"},"modified":"2025-12-27T07:30:27","modified_gmt":"2025-12-27T07:30:27","slug":"login","status":"publish","type":"page","link":"https:\/\/www.cconnectgh.org\/?page_id=2897","title":{"rendered":"Login"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2897\" class=\"elementor elementor-2897\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7a3a2d6 e-grid e-con-boxed e-con e-parent\" data-id=\"7a3a2d6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fdea6d0 elementor-widget elementor-widget-google_maps\" data-id=\"fdea6d0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"google_maps.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-custom-embed\">\n\t\t\t<iframe loading=\"lazy\"\n\t\t\t\t\tsrc=\"https:\/\/maps.google.com\/maps?q=kwadaso%2C%20kumasi%20ghana&#038;t=m&#038;z=10&#038;output=embed&#038;iwloc=near\"\n\t\t\t\t\ttitle=\"kwadaso, kumasi ghana\"\n\t\t\t\t\taria-label=\"kwadaso, kumasi ghana\"\n\t\t\t><\/iframe>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ac165e5 e-grid e-con-boxed e-con e-parent\" data-id=\"ac165e5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a01e144 elementor-widget elementor-widget-shortcode\" data-id=\"a01e144\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\r\n        <style>\r\n            .cc-ui-wrap{max-width:620px;margin:18px auto;padding:0 14px 22px;color:#fff;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;}\r\n            .cc-ui-surface{background:#0b0b0b;border-radius:14px;border:4px solid #1f1f1f;overflow:hidden;box-shadow:0 10px 24px rgba(0,0,0,.35);}\r\n            .cc-ui-head{padding:14px 14px 10px;border-bottom:1px solid #1b1b1b;background:#0e0e0e;}\r\n            .cc-ui-title{margin:0;font-size:24px;font-weight:900;letter-spacing:.2px;}\r\n            .cc-ui-sub{margin:6px 0 0;font-size:18px;color:rgba(255,255,255,.7);line-height:1.45;}\r\n            .cc-ui-body{padding:14px;}\r\n            .cc-msg{margin:0 0 12px;padding:10px 12px;border-radius:12px;font-size:14px;border:1px solid transparent;}\r\n            .cc-msg-success{background:rgba(34,197,94,.12);border-color:rgba(34,197,94,.25);color:#d1fae5;}\r\n            .cc-msg-error{background:rgba(220,38,38,.12);border-color:rgba(220,38,38,.25);color:#fecaca;}\r\n            .cc-field{margin-bottom:12px;}\r\n            .cc-label{display:block;font-size:13px;font-weight:800;margin-bottom:6px;color:rgba(255,255,255,.92);}\r\n            .cc-input{width:100%;padding:12px 12px;border-radius:12px;border:1px solid #2a2a2a;background:#111;color:#fff;font-size:15px;outline:none;}\r\n            .cc-input:focus{border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,.15);}\r\n            .cc-btn{width:100%;padding:12px 14px;border-radius:14px;border:none;background:#2563eb;color:#fff;font-weight:900;font-size:15px;cursor:pointer;}\r\n            .cc-btn:hover{background:#1d4ed8;}\r\n            .cc-btn-secondary{background:#121212;border:1px solid #2a2a2a;}\r\n            .cc-btn-secondary:hover{background:#171717;}\r\n            .cc-rowlink{display:flex;gap:10px;align-items:center;justify-content:center;margin-top:10px;font-size:13px;color:rgba(255,255,255,.75);}\r\n            .cc-rowlink a{color:#93c5fd;text-decoration:none;font-weight:800;}\r\n            .cc-rowlink a:hover{text-decoration:underline;}\r\n            .cc-help{font-size:12px;color:rgba(255,255,255,.62);margin-top:8px;line-height:1.45;}\r\n            .cc-split{height:1px;background:#1f1f1f;margin:14px 0;}\r\n        <\/style>        <div class=\"cc-ui-wrap\">\r\n            <div class=\"cc-ui-surface\">\r\n                <div class=\"cc-ui-head\">\r\n                    <h3 class=\"cc-ui-title\">Login<\/h3>\r\n                    <p class=\"cc-ui-sub\">Access your CconnectGH account.<\/p>\r\n                <\/div>\r\n\r\n                <div class=\"cc-ui-body\">\r\n                    <div id=\"cc-login-msg\"><\/div>\r\n\r\n                    <form id=\"cc-login-form\">\r\n                        <div class=\"cc-field\">\r\n                            <label class=\"cc-label\">Email *<\/label>\r\n                            <input class=\"cc-input\" type=\"email\" name=\"email\" required autocomplete=\"email\">\r\n                        <\/div>\r\n\r\n                        <div class=\"cc-field\">\r\n                            <label class=\"cc-label\">Password *<\/label>\r\n                            <input class=\"cc-input\" type=\"password\" name=\"password\" required autocomplete=\"current-password\">\r\n                        <\/div>\r\n\r\n                        <button class=\"cc-btn\" type=\"submit\">Login<\/button>\r\n\r\n                        <div class=\"cc-rowlink\">\r\n                            <a href=\"https:\/\/www.cconnectgh.org\/?page_id=2887\">Forgot password?<\/a>\r\n                            <span>\u2022<\/span>\r\n                            <a href=\"https:\/\/www.cconnectgh.org\/?page_id=1072\">Create account<\/a>\r\n                        <\/div>\r\n                    <\/form>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <script>\r\n        (function(){\r\n            const apiBase = \"https:\/\/api.cconnectgh.org\/\";\r\n            const redirectUrl = \"https:\/\/www.cconnectgh.org\/?page_id=2911\";\r\n\r\n            function setMsg(text, isError){\r\n                const box = document.getElementById('cc-login-msg');\r\n                if(!box) return;\r\n                if(!text){ box.innerHTML=''; box.className=''; return; }\r\n                box.className = 'cc-msg ' + (isError ? 'cc-msg-error' : 'cc-msg-success');\r\n                box.textContent = text;\r\n            }\r\n\r\n            document.addEventListener('DOMContentLoaded', function(){\r\n                const form = document.getElementById('cc-login-form');\r\n                if(!form) return;\r\n\r\n                form.addEventListener('submit', async function(e){\r\n                    e.preventDefault();\r\n\r\n                    const email = form.email.value.trim();\r\n                    const password = form.password.value;\r\n\r\n                    if(!email || !password){\r\n                        setMsg('Please enter email and password.', true);\r\n                        return;\r\n                    }\r\n\r\n                    try{\r\n                        setMsg('Logging in...', false);\r\n\r\n                        const body = new URLSearchParams();\r\n                        body.append('username', email);\r\n                        body.append('password', password);\r\n\r\n                        const resp = await fetch(apiBase + 'auth\/login', {\r\n                            method: 'POST',\r\n                            headers: { 'Content-Type': 'application\/x-www-form-urlencoded' },\r\n                            body\r\n                        });\r\n\r\n                        const data = await resp.json().catch(()=>({}));\r\n\r\n                        if(!resp.ok){\r\n                            setMsg((data && data.detail) ? data.detail : 'Login failed.', true);\r\n                            return;\r\n                        }\r\n\r\n                        if(data && data.access_token){\r\n                            window.localStorage.setItem('cconnect_token', data.access_token);\r\n                            window.localStorage.setItem('cconnect_user_email', email);\r\n                            setMsg('Login successful.', false);\r\n                            window.location.href = redirectUrl;\r\n                            return;\r\n                        }\r\n\r\n                        setMsg('Login response invalid.', true);\r\n\r\n                    }catch(err){\r\n                        console.error(err);\r\n                        setMsg('Unexpected error during login.', true);\r\n                    }\r\n                });\r\n            });\r\n        })();\r\n        <\/script>\r\n        <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-2897","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages\/2897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2897"}],"version-history":[{"count":4,"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages\/2897\/revisions"}],"predecessor-version":[{"id":2901,"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=\/wp\/v2\/pages\/2897\/revisions\/2901"}],"wp:attachment":[{"href":"https:\/\/www.cconnectgh.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}