Kategorien
Sicherheit

OAuth Benutzer – bitte lesen!

Wenn ihr OAuth oder OAuth2 in euren Applikationen nutzt um bspw. einen Facebook Login zu realisieren solltet ihr unbedingt hier nachlesen:

OAuth 2.0 Threat Landscapes

Kategorien
Doctrine ORM MySQL PHP Symfony2

GET random Object mit Doctrine

Doctrine selbst hat keine ORDER BY rand() Funktion implementiert. Aber es gibt eine Lösung. Man lässt sich den total count der rows ausgeben und nutzt die PHP interne rand() Funktion um FirstResult zu definieren.

    /**
     * @return mixed
     */
    public function getTotal()
    {
        return $this->getEntityManager()->createQueryBuilder()
            ->select('COUNT(p.id)')
            ->from('AppBundle:Product', 'p')
            ->getQuery()
            ->getSingleScalarResult();
    }

    /**
     * @return mixed
     */
    public function getRandom()
    {
        return $this->getEntityManager()->createQueryBuilder()
            ->select('p')
            ->from('AppBundle:Product', 'p')
            ->setFirstResult(rand(0, $this->getTotal()-1))
            ->setMaxResults(1)
            ->getQuery()
            ->getSingleResult();
    }
Kategorien
Debugging Deployment Linux MySQL Server Shell

Search / Replace with SED without escaping slashes

As you might know, you can use any delimiter to use the search/replace feature of sed to avoid extreme escaping of slashes.

~/ sed -r -e 's@http://google.com/@http://example.com/@g' < input.file > output.file
Kategorien
Debugging Deployment GIT Server Versionierung

GIT get all files a user changed

Get all the files a user changed in a GIT repository with this command:

git log --pretty="%H" --author="git.user.name" | while read commit_hash; do git show --oneline --name-only $commit_hash | tail -n+2; done | sort | uniq
Kategorien
Frameworks Kohana Linux Nginx Server Shell

Kohana 2.3 NGINX htaccess like URL rewrite

Um Kohana 2.3 auf NGINX mit sauberen URLs zu konfigurieren geht folgende NGINX server config:

server {
        server_name example.com www.example.com;
        listen   80;

        root /srv/www/example.com/pages/;
        access_log /srv/www/example.com/logs/access.log;
        error_log /srv/www/example.com/logs/error.log;

        index index.php index.html index.htm;

        try_files $uri $uri/ @rewrite;

        location @rewrite {
                rewrite ^/(.*)$ /index.php/$1;
        }

        location ~ \.php {
                fastcgi_index index.php;
                fastcgi_pass 127.0.0.1:9000;

                include fastcgi_params;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param ENV "production";
        }
}
Kategorien
Debugging Doctrine ORM Frameworks MySQL Symfony2

SQL General error – 1553 Cannot drop index XYZ needed in a foreign key constraint

// show indexes of table
SHOW CREATE TABLE news;

// shows something like this
...
CONSTRAINT `FK_3A51546D12469DE2` FOREIGN KEY (`category_id`) REFERENCES `news_category` (`id`),
...

// drop index
ALTER TABLE news DROP FOREIGN KEY FK_3A51546D12469DE2;
Kategorien
GIT Versionierung

existentes GIT Repo in einen bestehenden Ordner (mit Dateien) integrieren

Um ein bestehendes GIT Repo in einen bestehenden Ordner, gefüllt mit Dateien, zu integrieren, kann man wie folgt vorgehen:

/~ cd notemptydir/

notemptydir/~ git init
notemptydir/~ git remote add origin PATH/TO/REPO
notemptydir/~ git fetch
notemptydir/~ git checkout -t origin/master
Kategorien
CMS Systeme Frameworks PHP Sonata Symfony2

Symfony Sonata ACL – neue Einträge die nicht im Sonata erzeugt werden haben keine Rechte

Um in Symfony Sonata die ACL auch mit Einträgen zu nutzen, die durch ein Frontend oder im Hintergrund erzeugt werden, ohne den Sonatakontext, muss man den ACL Eintrag selbst erstellen. Dazu kann man einen EntityEventListener installieren und im postPersist Event folgendes tun:

    public function postPersist(LifecycleEventArgs $args)
    {
        $this->addAcl($args);
    }

    protected function addAcl(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();

        $adminSecurityHandler = $this->container->get('sonata.admin.security.handler');

        $adminPool  = $this->container->get('sonata.admin.pool');
        $admin      = $adminPool->getAdminByClass(get_class($entity));

        if (null !== $admin) {
            $objectIdentity = ObjectIdentity::fromDomainObject($entity);
            $acl = $adminSecurityHandler->getObjectAcl($objectIdentity);
            if (is_null($acl)) {
                $acl = $adminSecurityHandler->createAcl($objectIdentity);
            }
            $adminSecurityHandler->addObjectClassAces($acl, $adminSecurityHandler->buildSecurityInformation($admin));
            $adminSecurityHandler->updateAcl($acl);
        }
    }
Kategorien
Debugging Linux PHP Server Shell

wo ist das php log auf diesem Server

wer sich das ab und an fragt, kann mit

php -i | grep log

angezeigt bekommen, wo die aktuelle php installation ihre logs hinschreibt.

Kategorien
Bildbearbeitung Debugging Lightroom Photographie Photoshop

Photoshop High DPI Scaling Problem

Wie schon in vielen Foren beschrieben, wird Photoshop und einige andere Adobe Produkte auf High DPI Bildschirmen nicht korrekt skaliert (mikroskopische Icons und Texte), wärend andere Adobe Produkte wie Lightroom keine Schwierigkeiten mit der korrekten Skalierung haben.

Die generelle Bildschirmauflösung des Gerätes zu ändern, ist keine Option, da dann andere Programme und das OS viel zu groß skalieren.

In meinem Fall ist ein Dell XPS 13 mit WIN8.1 mit einer Auflösung von 3200×1800 Bildpunkten am Start.

Erst nach einigem Suchen fand ich zumindest für Photoshop CC die Lösung in den experimentellen Einstellungen.

Siehe http://claudiamccue.com/2014/09/fixing-the-tiny-photoshop-cc-interface-on-hi-dpi-windows-displays/