Shahin Pour Naserani | Rasht | Shot to death | Witness Report Incorporated {"@context":"https://schema.org","@type":"ProfilePage","@id":"https://witness.report/people/d6f286fb-ff0c-11f0-a725-560003f1f421/shahin-pour-naserani#profile","url":"https://witness.report/people/d6f286fb-ff0c-11f0-a725-560003f1f421/shahin-pour-naserani","name":"Shahin Pour Naserani | Rasht | Shot to death | Witness Report Incorporated","mainEntity":{"@type":"Person","@id":"https://witness.report/people/d6f286fb-ff0c-11f0-a725-560003f1f421/shahin-pour-naserani#person","name":"Shahin Pour Naserani","identifier":"d6f286fb-ff0c-11f0-a725-560003f1f421","url":"https://witness.report/people/d6f286fb-ff0c-11f0-a725-560003f1f421/shahin-pour-naserani","alternateName":"شاهین پور ناصرانی","image":"https://witness.report/images/d6f286fb-ff0c-11f0-a725-560003f1f421.jpg","nationality":["Iranian"],"deathDate":"2026-01-08","description":"Last status: Shot to death | Health: Deceased | City: Rasht"},"primaryImageOfPage":{"@type":"ImageObject","contentUrl":"https://witness.report/images/d6f286fb-ff0c-11f0-a725-560003f1f421.jpg","url":"https://witness.report/images/d6f286fb-ff0c-11f0-a725-560003f1f421.jpg"}} Home About Tags ShahedSang Iran Massacre 2026 Artist Athlete Blogger CaseNeedsUpdate ChainMurders Disability EnvironmentalActivist HealthcareStaff Journalist LabourActivist Lawyer NonPoliticalCase Photographer Poet PS752Justice ReligiousMinority Student Teacher TheGreenMovement Writer Browse in Advanced Search Get Involved Report New Case Membership Support Our Work Witness Report API News English Persian Advanced Search Search Logout 📞 +61485870004 📞 Call 💬 WhatsApp ✈️ Telegram (function() { const STORAGE_KEY = 'wr_google_id_token_v1'; const clientId = "196042580665-2576hlsgr5kr1qujskevu0ogjc99e0ug.apps.googleusercontent.com"; let googleIdentityPromise = null; window.wrLoadGoogleIdentity = function() { if (!clientId || (window.google && google.accounts && google.accounts.id)) { return Promise.resolve(); } if (googleIdentityPromise) return googleIdentityPromise; googleIdentityPromise = new Promise(function(resolve, reject) { const script = document.createElement('script'); script.src = 'https://accounts.google.com/gsi/client'; script.async = true; script.onload = resolve; script.onerror = reject; document.head.appendChild(script); }); return googleIdentityPromise; }; const loadGoogleOnInteraction = function() { window.wrLoadGoogleIdentity().catch(function() {}); }; document.addEventListener('pointerdown', loadGoogleOnInteraction, { once: true, passive: true }); document.addEventListener('keydown', loadGoogleOnInteraction, { once: true }); window.addEventListener('load', function() { setTimeout(loadGoogleOnInteraction, 1000); }, { once: true }); // Expose for other pages (people.php) to reuse init. window.wrGoogleStorageKey = STORAGE_KEY; const authSlot = document.getElementById('wrNavAuthSlot'); const loginEl = document.getElementById('wrNavGoogleSignIn'); const logoutBtn = document.getElementById('wrNavLogoutBtn'); if (!authSlot || !loginEl || !logoutBtn) return; function base64UrlDecodeToString(s) { try { const b64 = (s || '').replace(/-/g, '+').replace(/_/g, '/'); const padded = b64 + '==='.slice((b64.length + 3) % 4); return atob(padded); } catch (_) { return ''; } } function parseJwtPayload(token) { const parts = (token || '').split('.'); if (parts.length !== 3) return null; const json = base64UrlDecodeToString(parts[1]); if (!json) return null; try { return JSON.parse(json); } catch (_) { return null; } } function hasValidToken() { const token = (localStorage.getItem(STORAGE_KEY) || '').trim(); if (!token) return false; const payload = parseJwtPayload(token); const exp = payload && typeof payload.exp === 'number' ? payload.exp : 0; if (!exp) return false; return (Date.now() / 1000) < (exp - 30); } function setLoggedInUi(isLoggedIn) { if (!clientId) { authSlot.classList.add('d-none'); return; } authSlot.classList.remove('d-none'); logoutBtn.classList.toggle('d-none', !isLoggedIn); loginEl.classList.toggle('d-none', isLoggedIn); } window.wrHandleGoogleCredential = function(response) { const token = response && response.credential ? response.credential : ''; if (!token) return; try { localStorage.setItem(STORAGE_KEY, token); } catch (_) {} // Best-effort: notify server so we can keep an audit record of logins. // (Non-blocking; failures here should not break login UX.) try { fetch('/api/log_login.php', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }, body: new URLSearchParams({ idToken: token }), credentials: 'same-origin', keepalive: true }).catch(function() {}); } catch (_) {} setLoggedInUi(true); try { window.dispatchEvent(new CustomEvent('wr-google-credential', { detail: { token } })); } catch (_) {} }; window.wrEnsureGoogleInit = function() { if (!clientId) return; if (window.wrGoogleInitDone) return; if (!window.google || !google.accounts || !google.accounts.id) return; google.accounts.id.initialize({ client_id: clientId, callback: window.wrHandleGoogleCredential, ux_mode: 'popup', itp_support: true }); window.wrGoogleInitDone = true; }; function initLoginButtonWhenReady() { const loggedIn = hasValidToken(); if (!loggedIn) { try { localStorage.removeItem(STORAGE_KEY); } catch (_) {} } if (!clientId) { setLoggedInUi(loggedIn); return; } if (!window.google || !google.accounts || !google.accounts.id) { setTimeout(initLoginButtonWhenReady, 50); return; } window.wrEnsureGoogleInit(); if (!loggedIn) { try { google.accounts.id.renderButton(loginEl, { theme: 'outline', size: 'medium' }); } catch (_) {} } setLoggedInUi(loggedIn); } logoutBtn.addEventListener('click', function() { try { localStorage.removeItem(STORAGE_KEY); } catch (_) {} setLoggedInUi(false); window.location.reload(); }); initLoginButtonWhenReady(); })(); Shahin Pour Naserani شاهین پور ناصرانی Nationality : Iranian Age: 28 (1998) Status: Shot to death Health: Deceased2026-01-08 Share: X Telegram WhatsApp Bluesky | Contribute: Help Complete This Report UUID: d6f286fb-ff0c-11f0-a725-560003f1f421 Short link: https://sml.yt/ctri7 Copy (function() { const copyButton = document.querySelector('.wr-short-link__copy'); if (!copyButton) return; copyButton.addEventListener('click', async function() { const url = copyButton.getAttribute('data-copy-url') || ''; try { await navigator.clipboard.writeText(url); } catch (error) { const tempInput = document.createElement('textarea'); tempInput.value = url; tempInput.setAttribute('readonly', ''); tempInput.style.position = 'fixed'; tempInput.style.opacity = '0'; document.body.appendChild(tempInput); tempInput.select(); const copied = document.execCommand('copy'); tempInput.remove(); if (!copied) return; } const label = copyButton.querySelector('span'); if (label) { label.textContent = 'Copied'; window.setTimeout(function() { label.textContent = 'Copy'; }, 1500); } }); })(); Date: 2026-01-31 City: RashtProvince: GilanCountry: IranHealth Status: Deceased2026-01-08 Status: Shot to deathOn Thursday, 18 Dey 1404 (8 January 2026), originally from Jirdeh Rural District in Shaft County, Gilan Province, and a resident of Rasht, was shot in the heart by live ammunition fired by government suppressive forces during the public protests in Rasht and was killed. Shahin Pournasrani, 29 years old, was killed on January 9, 2026, at the Gas Square in the city of Rasht.Sources close to the Pournasrani family reported that he was first shot with a pellet gun. When he stopped, he was shot in the chest with a live bullet.According to a source close to the family, they searched for him for five days. Initially, the family was told he was detained, but after five days of back and forth, they were contacted and told to come and collect his body.Shahin Pournasrani's body, like many others killed in January, was buried quietly and anonymously. He was buried at night, and they were not even allowed to hold a ceremony at the mosque. The family is financially very weak. Shahin lived with his younger brother and mother, and he was the breadwinner for the family.The source also mentioned that they do not even have a decent house to hold a ceremony. The ceremony was held at a relative's house because their own home lacked water and gas. On the day of his burial, Shahin's mother shouted, saying that her son was killed with a bullet and that all of them should die by the bullet.The deceased lived in the Khartoum Jirdeh neighborhood of Rasht.*Translated on 2026-03-18* «شاهین پور ناصرانی» ۲۹ ساله روز ۱۹دی۱۴۰۴ در فلکه گاز شهر رشت کشته شده است.منابع نزدیک به خانواده پورناصرانی می گویند: «اول با تفنگ ساچمه ای به او شلیک کردند. وقتی متوقف شده با تیر جنگی به سینه اش زدند.»به گفته این منبع نزدیک به خانواده «پنج روز دنبالش می گشتند. اول به خانواده گفته بودند بازداشت است اما در نهایت بعد از ۵روز رفتن و آمدن با آن ها تماس گرفتند و گفتند برای تحویل گرفتن پیکر او مراجعه کنند.»پیکر شاهین پورناصرانی هم مثل بسیاری از کشته شدگان دی ماه در سکوت و غریبانه به خاک سپرده شده است: «شبانه دفنش کردند. حتی نگذاشتند مراسمی در مسجد بگیرند. این خانواده از نظر مالی بسیار ضعیف هستند. شاهین و برادر کوچکتر و مادرش با هم زندگی می کردند. خرج خانواده را شاهین می داد.»به گفته این منبع نزدیک به خانواده «حتا خانه خوبی ندارند که آن جا مراسم بگیرند. در خانه یکی از فامیل ها مراسم گرفتند. چون خانه خودشان آب و گاز نداشت. مادر شاهین روز خاکسپاری اش فریاد میزد و می گفت: با تیر بچه ام را کشتند. با تیر همه شانن باید بمیرند.»محل زندگی این جان باخته محله «خرطوم جیرده» شهر رشت است. More people in Rasht, Shot to death Amir Movahedi امیر موحدی Sadegh Yousefi صادق یوسفی Mohammad Rezaei محمد رضایی Complete list ... Links ایران وایر news Help Complete This Report with Your Input برای تکمیل این گزارش، اطلاعات خود را بنویسید. What should be corrected or added? چه چیزی باید اصلاح یا اضافه شود؟ Send updateارسال به‌روزرسانی To send a correction or message, please sign in with Google. No subscription is needed. برای ارسال اصلاحیه یا پیام، لطفاً با حساب گوگل وارد شوید. نیازی به اشتراک نیست. (function() { const clientId = "196042580665-2576hlsgr5kr1qujskevu0ogjc99e0ug.apps.googleusercontent.com"; const signInEl = document.getElementById('wrGoogleSignIn'); const formEl = document.getElementById('wrErrorReportForm'); const tokenEl = document.getElementById('wrGoogleIdToken'); const textareaEl = document.getElementById('wrReportText'); const submitBtn = document.getElementById('wrSubmitReportBtn'); const statusEl = document.getElementById('wrReportStatus'); const loginHintEl = document.getElementById('wrReportLoginHint'); if (!clientId || !signInEl || !formEl || !tokenEl) return; const STORAGE_KEY = (window.wrGoogleStorageKey || 'wr_google_id_token_v1'); function base64UrlDecodeToString(s) { try { const b64 = (s || '').replace(/-/g, '+').replace(/_/g, '/'); const padded = b64 + '==='.slice((b64.length + 3) % 4); const binary = atob(padded); // Convert binary -> UTF-8 const bytes = Uint8Array.from(binary, c => c.charCodeAt(0)); return new TextDecoder('utf-8', { fatal: false }).decode(bytes); } catch (_) { return ''; } } function parseJwtPayload(token) { const parts = (token || '').split('.'); if (parts.length !== 3) return null; const json = base64UrlDecodeToString(parts[1]); if (!json) return null; try { return JSON.parse(json); } catch (_) { return null; } } function getStoredValidToken() { const t = (localStorage.getItem(STORAGE_KEY) || '').trim(); if (!t) return ''; const payload = parseJwtPayload(t); const exp = payload && typeof payload.exp === 'number' ? payload.exp : 0; // Consider it expired 30s early to avoid edge cases. if (!exp || (Date.now() / 1000) >= (exp - 30)) return ''; return t; } function clearStoredToken() { try { localStorage.removeItem(STORAGE_KEY); } catch (_) {} } function setFormEnabled(enabled) { const on = !!enabled; if (textareaEl) textareaEl.disabled = !on; if (submitBtn) submitBtn.disabled = !on; } function showLoginPrompt() { setFormEnabled(false); tokenEl.value = ''; if (signInEl) signInEl.classList.remove('d-none'); if (loginHintEl) loginHintEl.classList.remove('d-none'); setStatus('', ''); } function showReportFormWithToken(token) { tokenEl.value = token; if (signInEl) signInEl.classList.add('d-none'); if (loginHintEl) loginHintEl.classList.add('d-none'); setFormEnabled(true); setStatus('', ''); } function setStatus(html, kind) { if (!statusEl) return; statusEl.className = kind ? ('alert alert-' + kind) : ''; statusEl.innerHTML = html || ''; } function initWhenReady() { // If we already have a valid token from a previous page, reuse it. const existing = getStoredValidToken(); if (existing) { showReportFormWithToken(existing); return; } else { clearStoredToken(); showLoginPrompt(); } // Initialize (once) via header helper, then render the button here. function renderWhenReady() { if (!window.google || !google.accounts || !google.accounts.id) { setTimeout(renderWhenReady, 50); return; } if (typeof window.wrEnsureGoogleInit === 'function') { try { window.wrEnsureGoogleInit(); } catch (_) {} } else { // Fallback if header isn't present for some reason. try { google.accounts.id.initialize({ client_id: clientId, callback: window.wrHandleGoogleCredential || function() {}, ux_mode: 'popup', itp_support: true }); } catch (_) {} } try { google.accounts.id.renderButton(signInEl, { theme: 'outline', size: 'large' }); } catch (_) {} } renderWhenReady(); } initWhenReady(); // If user logs in from the navbar, this page can react immediately. window.addEventListener('wr-google-credential', function(e) { const token = e && e.detail && e.detail.token ? String(e.detail.token) : ''; if (!token) return; showReportFormWithToken(token); if (textareaEl) textareaEl.focus(); }); formEl.addEventListener('submit', async function(e) { e.preventDefault(); setStatus('Sending…', 'info'); try { const formData = new FormData(formEl); const res = await fetch(formEl.action, { method: 'POST', body: formData, credentials: 'same-origin' }); const data = await res.json().catch(() => null); if (!res.ok || !data || !data.ok) { const msg = (data && data.error) ? data.error : 'Could not submit your report. Please try again later.'; setStatus(msg, 'warning'); // If auth failed (expired/invalid token), clear and show sign-in. const lower = (msg || '').toLowerCase(); if (lower.includes('token') || lower.includes('google') || res.status === 401 || res.status === 403) { clearStoredToken(); showLoginPrompt(); } return; } setStatus('Thank you. Your message was sent for review.', 'success'); if (textareaEl) textareaEl.value = ''; if (textareaEl) textareaEl.disabled = true; if (submitBtn) submitBtn.disabled = true; formEl.classList.add('d-none'); } catch (err) { setStatus('Network error. Please try again.', 'warning'); } }); })(); Once you submit your report, we carefully review and publish it as the latest verified update on the detainee's case, ensuring that their situation remains visible, documented, and accessible to the public. By keeping accurate and up to date information online, Witness Report helps prevent cases from being forgotten, strengthens public awareness, and reinforces accountability. This process offers reassurance that your loved one's story continues to be seen, acknowledged, and remembered. Media WR News X (Twitter) Instagram Telegram Channel Thank You Mardom Fundation EasyHostWay.AU The Joint Action Group Get Involved Report New Case Membership Support Our Work Witness Report API About Us Privacy Policy Recently Viewed © 2022-2026 Witness Report Incorporated. Established 2022. All rights reserved. (function() { const thankYouLinks = document.querySelectorAll('[data-thank-you-login-only]'); let isLoggedIn = false; try { const storageKey = window.wrGoogleStorageKey || 'wr_google_id_token_v1'; const token = (localStorage.getItem(storageKey) || '').trim(); const tokenParts = token.split('.'); if (tokenParts.length === 3) { const encodedPayload = tokenParts[1].replace(/-/g, '+').replace(/_/g, '/'); const paddedPayload = encodedPayload + '==='.slice((encodedPayload.length + 3) % 4); const payload = JSON.parse(atob(paddedPayload)); isLoggedIn = typeof payload.exp === 'number' && (Date.now() / 1000) < (payload.exp - 30); } } catch (error) { isLoggedIn = false; } if (isLoggedIn) { thankYouLinks.forEach(function(link) { link.classList.remove('d-none'); }); } const cookieName = 'wr_recent_profiles'; const recentSections = document.querySelectorAll('[data-recent-profiles]'); function readRecentProfiles() { const cookie = document.cookie.split('; ').find(function(item) { return item.indexOf(cookieName + '=') === 0; }); if (!cookie) return []; try { const profiles = JSON.parse(decodeURIComponent(cookie.substring(cookieName.length + 1))); if (!Array.isArray(profiles)) return []; return profiles.filter(function(profile) { if (!profile || typeof profile.name !== 'string' || typeof profile.path !== 'string') return false; try { const url = new URL(profile.path, window.location.origin); return url.origin === window.location.origin && url.pathname.indexOf('/people/') === 0; } catch (error) { return false; } }).slice(0, 5); } catch (error) { return []; } } const profiles = readRecentProfiles(); const currentProfile = document.getElementById('wrCurrentProfileVisit'); if (currentProfile) { const currentPath = currentProfile.dataset.profilePath || ''; const currentName = currentProfile.dataset.profileName || ''; if (currentPath && currentName) { const existingIndex = profiles.findIndex(function(profile) { return profile.path === currentPath; }); if (existingIndex !== -1) profiles.splice(existingIndex, 1); profiles.unshift({ name: currentName, path: currentPath }); profiles.splice(5); const cookieValue = encodeURIComponent(JSON.stringify(profiles)); document.cookie = cookieName + '=' + cookieValue + '; Path=/; Max-Age=7776000; SameSite=Lax' + (window.location.protocol === 'https:' ? '; Secure' : ''); } } recentSections.forEach(function(section) { const recentList = section.querySelector('[data-recent-profiles-list]'); if (!recentList) return; profiles.forEach(function(profile) { const item = document.createElement('li'); const link = document.createElement('a'); link.href = profile.path; link.textContent = profile.name; item.appendChild(link); recentList.appendChild(item); }); if (profiles.length) section.classList.remove('d-none'); }); })(); window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-L6GJNEC9YW'); // Prevent navbar from collapsing when dropdown is clicked document.addEventListener('DOMContentLoaded', function() { const dropdown = document.querySelector('.navbar .dropdown'); if (dropdown) { dropdown.addEventListener('click', function(e) { e.stopPropagation(); }); } }); if ('serviceWorker' in navigator) { window.addEventListener('load', function() { navigator.serviceWorker.register('/sw.js', { scope: '/' }).catch(function(err) { console.warn('Service worker registration failed:', err); }); }); }