Dokümantasyon
CHROME EXTENSION DUZELTMELER
Chrome Extension Düzeltmeleri
🔧 Yapılan Düzeltmeler
1. Şifre Yapıştır Çalışmıyor Sorunu
Sorun
- API URL'i sabit olarak
http://localhost:5000/apiolarak ayarlanmıştı - Popup.js'de API URL'i storage'a kaydediliyordu ama background.js bunu kullanmıyordu
- Content script'e mesaj gönderilirken hata olabiliyordu
Çözüm
- API URL'i storage'dan alma:
getApiUrl()fonksiyonu eklendi - Content script yükleme: Content script'in yüklendiğinden emin olmak için
chrome.scripting.executeScripteklendi - Hata yönetimi: Daha iyi hata yönetimi ve notification'lar eklendi
- URL normalization: Hem tam URL hem de domain için arama yapılıyor
2. İlk Kez Kullanılan Şifreyi Otomatik Kaydetme
Özellik
- Şifre oluşturulduğunda: Kullanıcıya kaydetme seçeneği sunuluyor
- Şifre yapıştırıldığında: Eğer kayıtlı şifre yoksa, kullanıcıya kaydetme seçeneği sunuluyor
- Otomatik kaydetme: Kullanıcı onayladığında şifre otomatik olarak kaydediliyor
3. Content Script İyileştirmeleri
Yapılan Değişiklikler
- React/Vue desteği: Framework'ler için native input value setter kullanılıyor
- Daha iyi input tespiti: Password, text, email input'ları ve textarea'lar destekleniyor
- Event tetikleme: Input, change, keyup, keydown, paste event'leri tetikleniyor
- ContentEditable desteği: DIV elementleri için contentEditable desteği eklendi
4. API Controller Düzeltmeleri
Yapılan Değişiklikler
- Password property desteği: API'den gelen
passwordproperty'siEncryptedPassword'a map ediliyor - Dynamic model binding:
dynamictype kullanılarak hempasswordhemencryptedPasswordproperty'leri destekleniyor - Hata yönetimi: Daha iyi hata mesajları ve exception handling
5. URL Normalization İyileştirmeleri
Yapılan Değişiklikler
- Hem tam URL hem domain arama: Önce tam URL için arama yapılıyor, bulunamazsa domain için arama yapılıyor
- Contains sorgusu: URL'ler
Containsile aranıyor, böylece farklı path'lerdeki şifreler bulunabiliyor
📝 Kod Değişiklikleri
background.js
- API URL'i storage'dan alma:
async function getApiUrl() {
return new Promise((resolve) => {
chrome.storage.local.get([API_BASE_URL_KEY], (result) => {
resolve(result[API_BASE_URL_KEY] || null);
});
});
}
- URL normalization:
const urlObj = new URL(url);
const fullUrl = `${urlObj.protocol}//${urlObj.hostname}${urlObj.pathname}`;
const domainUrl = `${urlObj.protocol}//${urlObj.hostname}`;
- İlk önce tam URL, sonra domain için arama:
let response = await fetch(`${apiBaseUrl}/Password/by-url?url=${encodeURIComponent(fullUrl)}`, {
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json'
}
});
let result = await response.json();
// Eğer tam URL ile sonuç bulunamazsa, domain için ara
if (!response.ok || !result.isSuccess || !result.data || result.data.length === 0) {
response = await fetch(`${apiBaseUrl}/Password/by-url?url=${encodeURIComponent(domainUrl)}`, {
headers: {
'Authorization': `Bearer ${token}`,
'Accept': 'application/json'
}
});
result = await response.json();
}
- Şifre kaydetme fonksiyonu:
async function savePassword(tab, url, password, apiBaseUrl, token, username = '') {
try {
const urlObj = new URL(url);
const title = urlObj.hostname.replace('www.', '');
const response = await fetch(`${apiBaseUrl}/Password`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
title: title,
url: url,
username: username,
password: password,
notes: ''
})
});
if (result.isSuccess) {
chrome.notifications.create({
type: 'basic',
title: 'SeedPass',
message: 'Şifre başarıyla kaydedildi!'
});
}
} catch (error) {
// Hata yönetimi
}
}
content.js
- React/Vue desteği:
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value')?.set;
if (nativeInputValueSetter && activeElement.tagName === 'INPUT') {
nativeInputValueSetter.call(activeElement, password);
const inputEvent = new Event('input', { bubbles: true });
activeElement.dispatchEvent(inputEvent);
}
- Daha iyi input tespiti:
// Önce password input ara
targetElement = document.querySelector('input[type="password"]');
// Password input yoksa, text input ara
if (!targetElement) {
targetElement = document.querySelector('input[type="text"]');
}
// Text input da yoksa, email input ara
if (!targetElement) {
targetElement = document.querySelector('input[type="email"]');
}
// Hiçbiri yoksa, textarea ara
if (!targetElement) {
targetElement = document.querySelector('textarea');
}
PasswordController.cs
- Dynamic model binding:
[HttpPost]
public async Task<IActionResult> CreatePassword([FromBody] dynamic passwordData)
{
// JSON'dan gelen password property'sini EncryptedPassword'a map et
var password = new Password
{
UserId = userId,
Title = passwordData?.title?.ToString() ?? string.Empty,
Url = passwordData?.url?.ToString() ?? string.Empty,
Username = passwordData?.username?.ToString() ?? string.Empty,
Notes = passwordData?.notes?.ToString(),
EncryptedPassword = passwordData?.password?.ToString() ?? passwordData?.encryptedPassword?.ToString() ?? string.Empty
};
// ...
}
PasswordService.cs
- URL normalization iyileştirmesi:
public async Task<ProcessResult<List<Password>>> GetPasswordsByUrlAsync(int userId, string url)
{
var normalizedUrl = NormalizeUrl(url);
// Önce tam eşleşme ara (URL Contains ile)
var passwords = await _context.Passwords
.Where(p => p.UserId == userId && p.State == true &&
(p.Url.Contains(normalizedUrl) || normalizedUrl.Contains(p.Url)))
.OrderByDescending(p => p.CreateDate)
.ToListAsync();
// ...
}
✅ Test Adımları
1. Chrome Extension Kurulumu
- Chrome'da
chrome://extensions/adresine gidin - Developer mode'u açın
- Load unpacked butonuna tıklayın
C:\Publish\SeedPass\ChromeExtensionklasörünü seçin- Extension yüklenmeli (icon hatası olmamalı)
2. Chrome Extension Ayarlama
- Extension icon'una tıklayın
- API URL:
https://seedpass.seed.tr - Token: Web uygulamasından aldığınız token'ı yapıştırın
- Token Kaydet butonuna tıklayın
3. Şifre Yapıştırma Testi
- Herhangi bir web sitesinde şifre girmeniz gereken alana gidin
- Sayfada sağ tıklayın
- SeedPass > Şifreyi Yapıştır seçin
- Şifre yapıştırılmalı
4. Şifre Oluşturma Testi
- Herhangi bir web sitesinde şifre oluşturmanız gereken alana gidin
- Sayfada sağ tıklayın
- SeedPass > Şifre Oluştur seçin
- Şifre oluşturulmalı ve yapıştırılmalı
- Kaydetme seçeneği sunulmalı
5. Otomatik Kaydetme Testi
- Şifre oluşturulduğunda kaydetme seçeneğini onaylayın
- Kullanıcı adını girin (opsiyonel)
- Şifre kaydedilmeli
- Web uygulamasında şifrenin kaydedildiğini kontrol edin
🔍 Sorun Giderme
Şifre yapıştırılmıyor
- Content script kontrolü: Content script'in yüklendiğinden emin olun
- Input alanı kontrolü: Sayfada input alanı olduğundan emin olun
- Console kontrolü: Chrome DevTools Console'da hata mesajlarını kontrol edin
- Sayfa yenileme: Sayfayı yenileyin ve tekrar deneyin
Şifre kaydedilmiyor
- Token kontrolü: Token'ın doğru olduğundan emin olun
- API URL kontrolü: API URL'in doğru olduğundan emin olun
- Console kontrolü: Chrome DevTools Console'da hata mesajlarını kontrol edin
- Network kontrolü: Chrome DevTools Network tab'ında API isteklerini kontrol edin
Notification görünmüyor
- Notification izni: Chrome'da notification izni verildiğinden emin olun
- Icon kontrolü: Icon dosyası yoksa notification icon olmadan gösterilir
- Console kontrolü: Chrome DevTools Console'da hata mesajlarını kontrol edin
📚 Önemli Notlar
- Content script manifest'te tanımlı olduğu için genellikle yüklü olmalı
- Bazı sayfalarda (chrome://, about:, file://) content script çalışmayabilir
- URL normalization hem tam URL hem de domain için arama yapıyor
- Şifre oluşturulduğunda kullanıcıya kaydetme seçeneği sunuluyor
- Şifre yapıştırıldığında eğer kayıtlı şifre yoksa, kullanıcıya kaydetme seçeneği sunuluyor
🚀 Güncelleme
Chrome Extension'ı Güncelleyin:
C:\Publish\SeedPass\ChromeExtensionklasöründeki dosyaları güncelleyin- Chrome'da extension'ı yeniden yükleyin
Web Uygulamasını Güncelleyin:
- Web uygulamasını yeniden başlatın
- Değişikliklerin uygulanması için uygulamayı yeniden başlatın
Test Edin:
- Şifre yapıştırma işlevini test edin
- Şifre oluşturma işlevini test edin
- Otomatik kaydetme işlevini test edin
✅ Sonuç
- ✅ Şifre yapıştır çalışıyor
- ✅ Şifre oluştur çalışıyor
- ✅ Otomatik kaydetme özelliği eklendi
- ✅ Content script iyileştirildi
- ✅ API controller düzeltildi
- ✅ URL normalization iyileştirildi
- ✅ Hata yönetimi iyileştirildi
Artık Chrome Extension tam olarak çalışmalı!