• 08-02-2015, 01:29:41
    #1
    Merhaba,

    Forumda ve diğer internet sitelerinde gördüğüm lisans mekanizmaları eski ve yetersiz kalmaktaydı.
    Bende daha stabil bir sistem yazmak istedim. Yazımın en altında bulunan bağlantıdan dosyaları indirebilirsiniz.
    İyi kodlamalar dilerim.
    Bilgi;

    Lisans mekanizmasını kullanmak "rmccue/requests" paketini ihtiyacınız vardır. Composer ile bu paketi sağlayabilirsiniz.
    examples/local.php;
    <?php
    
    	require '../vendor/autoload.php';
    
    	use Balcan\Key\Generator as KeyGenerator;
    	use Balcan\Key\Repository as KeyRepository;
    	use Balcan\Verifier\Local as LocalVerifier;
    
    	$secret_key = 'this_is_secret_key';
    
    	$host = 'example.com';
    
    	$repo1 = new KeyRepository;
    	$repo2 = new KeyRepository;
    
    	$repo1->setKey('61BB-BF9C-6101-1880-1314-E84F-5D30-9AE7');
    	$repo2->setKey('32AB-1B1S-3269-7524-1922-BAF1-8E52-2BA4');
    
    	$good_key = $repo1->getKey();
    
    	$bad_key = $repo2->getKey();
    
    	$generated_key = KeyGenerator::generate($secret_key, $host);
    
    	$result1 = LocalVerifier::verify($good_key, $generated_key);
    
    	$result2 = LocalVerifier::verify($bad_key, $generated_key);
    
    	var_dump(compact('result1', 'result2'));
    examples/remote.php;
    <?php
    
    	require '../vendor/autoload.php';
    
    	use Balcan\Key\Generator as KeyGenerator;
    	use Balcan\Key\Repository as KeyRepository;
    	use Balcan\Verifier\Remote as RemoteVerifier;
    
    	$host = 'example.com';
    
    	$checkpoint_url = 'http://127.0.0.1/license-verifier/examples/checkpoint.php'
    				    . '?host=' . $host;
    
    	$repo1 = new KeyRepository;
    	$repo2 = new KeyRepository;
    
    	$repo1->setKey('7B4D-79D1-BC38-B34F-0DAD-B3F6-6CB4-9331');
    	$repo2->setKey('4E2A-94E2-CA15-A27A-5AC2-CFE4-45A4-4627');
    
    	$good_key = $repo1->getKey();
    
    	$bad_key = $repo2->getKey();
    
    	$result1 = RemoteVerifier::verify($good_key, $checkpoint_url);
    
    	$result2 = RemoteVerifier::verify($bad_key, $checkpoint_url);
    
    	var_dump(compact('result1', 'result2'));
    İndirmek için buraya tıklayınız.
  • 08-02-2015, 02:14:50
    #2
    emeğine sağlık. illa ki birilerinin işini görecektir teşekkürler
  • 08-02-2015, 02:51:16
    #3
    Öncelikle temiz ve anlaşılır bir kodlama olmuş, tebrik ederim.

    Nacizane bir kaç tavsiyem olacak, dikkate almaya layık görürsen mutlu olurum.
    getenv ile kontrol etmek daha mantıklı çünkü default halde safe_modda put_env çalışmaz ancak lisans kısmına safe_mod kontrolü koymamışsın. Tabi safe_mode_allowed_env_vars ile bu da aşılabilir bir durum. Bu yüzden bir seçenek olarak da çıkış ip'si ile kontrol etmeni tavsiye ederim.

    rmccue linkini de konu içerisine eklersen kullanacak arkadaşlara yardımcı olursun.

    Bir de kontrol edemedim ancak CLIENT_SIDE sabitin 1 olduğunda bir mantık ve bir yazım hatan var gibi. Yazım hatası Controller dosyasında return $this->key->getKey() === $cache->get($this->key->getKey()); satırında. Cache değişkeni farklı bir metodda tanımlı olduğunda tanımsız diye hata verecektir. return $this->key->getKey() === $this->cache->get($this->key->getKey()); yapman kafi olacaktır.
    Mantık hatası ise $this->cache->set($this->key->getKey(), $request->body); satırında diyebilirim. Burada eğer dönüş olarak anahtar yazmıyorsa hatalı sonuç çıkacaktır. Çünkü burada dosyaya dönüş değeri yazılırken, ki bunun 0 veya 1 olduğunu tahmin ediyorum; $this->cache->set($this->key->getKey(), $request->body); satırında ise anahtarla anahtar adındaki dosya içeriği karşılaştırılıyor. Yani bu satırın aslında yazım yanlışı dışında mantık hatası barındırıyor. Bunu da Cache.php dosyasında file_put_contents($this->getDir() . '/' . $hash, $data); satırını file_put_contents($this->getDir() . '/' . $hash, $hash); olarak değiştirerek önleyebilirsin gibi. Gibi diyorum çünkü bu kısım sadece kodlara yüzeysel olarak baktığım için %100 emin olmadığım bir yer.

    Son tavsiyem de, lisans sınıfını static olarak kullanman. Gözle görülür bir performans farkı olmasa da, böylesi güzel bir kodlamada daha uygun olacağı kanaatindeyim.
  • 08-02-2015, 04:18:09
    #4
    @Seyranli; yorumun için teşekkür ederim.

    safe_mod PHP 5.3.x sonrasında default olarak kapalı geliyor. Ekstra bir kontrol koyma gereği duymadım. Çıkış IP'si kısmını inceleyeceğim fakat $_SERVER globalinden alındığında dışarıdan müdaheleler oluyor. Bu sebepten ötürü bu yolu seçtim. rmccue/requests paketini zaten composer.json'a ekledim.

    CLIENT_SIDE ve SERVER_SIDE sabitleri birer tanımlama sadece okunabilirliği artırmak amaçlı ekledim. License\Controller::setMethod() fonksiyonuyla yapılan işlemin client mi server mi olduğu tanımlanabiliyor. Yazım hatası kısmına katılmıyorum. Fark ettin mi bilmiyorum ama Cache ve Key sınıfları contstructor'dan sınıfa dahil ediliyor ve bu şekilde Controller sınıfında ulaşabiliyoruz. file_put_contents konusuna gelirsek orada bir isimlendirme hatası olduğunu düşünüyorum. Sorun değil, düzeltebilirim. Sınıfı static yapma konusuna gelirsek saçma olacağını düşünüyorum.
  • 08-02-2015, 04:27:37
    #5
    Dediğim gibi sadece tavsiyedir, kendimce her yazdığım madde için haklı sebeplerim var ama neticede senin kodların. İyi geceler
  • 09-02-2015, 10:55:16
    #6
    kodlama harika.. teşekkürler
  • 09-02-2015, 15:43:16
    #7
    Yorumlarınız için teşekkür ederim.
  • 09-02-2015, 18:02:31
    #8
    Üyeliği durduruldu
    Kaliteli, teşekkürler.
  • 23-02-2015, 17:38:05
    #9
    Yorumlarınız için teşekkür ederim.