Added login and posting functionality
Signed-off-by: Gergely Polonkai (W00d5t0ck) <polesz@w00d5t0ck.info>
This commit is contained in:
parent
5bcd9f079b
commit
04d408aee0
@ -23,6 +23,7 @@ class AppKernel extends Kernel
|
||||
new Io\TcpdfBundle\IoTcpdfBundle(),
|
||||
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
|
||||
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
|
||||
new Ivory\CKEditorBundle\IvoryCKEditorBundle(),
|
||||
new GergelyPolonkai\FrontBundle\GergelyPolonkaiFrontBundle(),
|
||||
new GergelyPolonkai\GeshiBundle\GergelyPolonkaiGeshiBundle(),
|
||||
);
|
||||
|
28
app/DoctrineMigrations/Version20120904170638.php
Normal file
28
app/DoctrineMigrations/Version20120904170638.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace Application\Migrations;
|
||||
|
||||
use Doctrine\DBAL\Migrations\AbstractMigration,
|
||||
Doctrine\DBAL\Schema\Schema;
|
||||
|
||||
/**
|
||||
* Auto-generated Migration: Please modify to your need!
|
||||
*/
|
||||
class Version20120904170638 extends AbstractMigration
|
||||
{
|
||||
public function up(Schema $schema)
|
||||
{
|
||||
// this up() migration is autogenerated, please modify it to your needs
|
||||
$this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql");
|
||||
|
||||
$this->addSql("ALTER TABLE users ADD password VARCHAR(50) NOT NULL");
|
||||
}
|
||||
|
||||
public function down(Schema $schema)
|
||||
{
|
||||
// this down() migration is autogenerated, please modify it to your needs
|
||||
$this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql");
|
||||
|
||||
$this->addSql("ALTER TABLE users DROP password");
|
||||
}
|
||||
}
|
@ -4,18 +4,18 @@ jms_security_extra:
|
||||
|
||||
security:
|
||||
encoders:
|
||||
Symfony\Component\Security\Core\User\User: plaintext
|
||||
GergelyPolonkai\FrontBundle\Entity\User:
|
||||
id: gergely_polonkai_front.service.crypt_encoder
|
||||
|
||||
role_hierarchy:
|
||||
ROLE_ADMIN: ROLE_USER
|
||||
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
|
||||
|
||||
providers:
|
||||
in_memory:
|
||||
memory:
|
||||
users:
|
||||
user: { password: userpass, roles: [ 'ROLE_USER' ] }
|
||||
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
|
||||
gergely_polonkai_front.entity.user:
|
||||
entity:
|
||||
class: GergelyPolonkai\FrontBundle\Entity\User
|
||||
property: username
|
||||
|
||||
firewalls:
|
||||
dev:
|
||||
@ -23,17 +23,17 @@ security:
|
||||
security: false
|
||||
|
||||
login:
|
||||
pattern: ^/demo/secured/login$
|
||||
pattern: ^/admin/login.html$
|
||||
security: false
|
||||
|
||||
secured_area:
|
||||
pattern: ^/demo/secured/
|
||||
pattern: ^/admin
|
||||
form_login:
|
||||
check_path: /demo/secured/login_check
|
||||
login_path: /demo/secured/login
|
||||
check_path: /admin/login-check.do
|
||||
login_path: /admin/login.html
|
||||
logout:
|
||||
path: /demo/secured/logout
|
||||
target: /demo/
|
||||
path: /admin/logout
|
||||
target: /
|
||||
#anonymous: ~
|
||||
#http_basic:
|
||||
# realm: "Secured Demo Area"
|
||||
|
@ -24,9 +24,10 @@
|
||||
"sensio/generator-bundle": "2.1.*",
|
||||
"jms/security-extra-bundle": "1.2.*",
|
||||
"jms/di-extra-bundle": "1.1.*",
|
||||
"easybook/geshi": "dev-master",
|
||||
"stof/doctrine-extensions-bundle": "dev-master",
|
||||
"doctrine/doctrine-migrations-bundle": "dev-master",
|
||||
"easybook/geshi": "dev-master",
|
||||
"stof/doctrine-extensions-bundle": "dev-master",
|
||||
"doctrine/doctrine-migrations-bundle": "dev-master",
|
||||
"egeloen/ckeditor-bundle": "dev-master",
|
||||
"gergelypolonkai/tcpdfbundle": "dev-master"
|
||||
},
|
||||
"scripts": {
|
||||
|
@ -0,0 +1,79 @@
|
||||
<?php
|
||||
namespace GergelyPolonkai\FrontBundle\Controller;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
||||
use Symfony\Component\Security\Core\SecurityContext;
|
||||
|
||||
use GergelyPolonkai\FrontBundle\Form\PostType;
|
||||
use GergelyPolonkai\FrontBundle\Entity\Post;
|
||||
|
||||
/**
|
||||
* Description of AdminController
|
||||
*
|
||||
* @author polonkai.gergely
|
||||
*
|
||||
* @Route("/admin")
|
||||
*/
|
||||
class AdminController extends Controller
|
||||
{
|
||||
/**
|
||||
* @return array
|
||||
*
|
||||
* @Route("/login.html")
|
||||
* @Template
|
||||
*/
|
||||
public function loginAction()
|
||||
{
|
||||
$request = $this->getRequest();
|
||||
$session = $request->getSession();
|
||||
|
||||
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
|
||||
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
|
||||
} else {
|
||||
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
|
||||
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
|
||||
}
|
||||
|
||||
return array(
|
||||
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
|
||||
'error' => $error,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/login-check.do", name="GergelyPolonkaiFrontBundle_adminLoginCheck")
|
||||
*/
|
||||
public function loginCheckAction()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/blog/post", name="GergelyPolonkaiFrontBundle_adminNewBlogPost")
|
||||
* @Template
|
||||
*/
|
||||
public function newBlogPostAction()
|
||||
{
|
||||
$post = new Post();
|
||||
$form = $this->createForm(new PostType(), $post);
|
||||
$request = $this->getRequest();
|
||||
$user = $this->get('security.context')->getToken()->getUser();
|
||||
|
||||
if ($request->getMethod() === 'POST') {
|
||||
$form->bind($request);
|
||||
if ($form->isValid()) {
|
||||
$post->setUser($user);
|
||||
$em = $this->getDoctrine()->getEntityManager();
|
||||
$em->persist($post);
|
||||
$em->flush();
|
||||
|
||||
return $this->redirect($this->generateUrl('GergelyPolonkaiFrontBundle_adminNewBlogPost'));
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'form' => $form->createView(),
|
||||
);
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ namespace GergelyPolonkai\FrontBundle\Entity;
|
||||
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Gedmo\Mapping\Annotation as GedmoORM;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
||||
/**
|
||||
* Description of Post
|
||||
@ -36,6 +37,7 @@ class Post
|
||||
* @var string $title
|
||||
*
|
||||
* @ORM\Column(type="string", length=100)
|
||||
* @Assert\NotBlank()
|
||||
*/
|
||||
private $title;
|
||||
|
||||
@ -51,6 +53,7 @@ class Post
|
||||
* @var string $content
|
||||
*
|
||||
* @ORM\Column(type="text", nullable=false)
|
||||
* @Assert\NotBlank()
|
||||
*/
|
||||
private $content;
|
||||
|
||||
@ -160,4 +163,30 @@ class Post
|
||||
{
|
||||
return $this->createdAt;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set slug
|
||||
*
|
||||
* @param string $slug
|
||||
* @return Post
|
||||
*/
|
||||
public function setSlug($slug)
|
||||
{
|
||||
$this->slug = $slug;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set createdAt
|
||||
*
|
||||
* @param \DateTime $createdAt
|
||||
* @return Post
|
||||
*/
|
||||
public function setCreatedAt($createdAt)
|
||||
{
|
||||
$this->createdAt = $createdAt;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@
|
||||
namespace GergelyPolonkai\FrontBundle\Entity;
|
||||
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
|
||||
/**
|
||||
* Description of User
|
||||
@ -11,7 +12,7 @@ use Doctrine\ORM\Mapping as ORM;
|
||||
* @ORM\Entity
|
||||
* @ORM\Table(name="users")
|
||||
*/
|
||||
class User
|
||||
class User implements UserInterface
|
||||
{
|
||||
/**
|
||||
* @ORM\Id
|
||||
@ -30,6 +31,29 @@ class User
|
||||
*/
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* @var string $password
|
||||
*
|
||||
* @ORM\Column(type="string", length=50, nullable=false)
|
||||
*/
|
||||
private $password;
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return $this->name . '(' . $this->username . ')';
|
||||
}
|
||||
|
||||
public function getSalt() {
|
||||
return $this->password;
|
||||
}
|
||||
|
||||
public function eraseCredentials() {
|
||||
}
|
||||
|
||||
public function getRoles() {
|
||||
return array('ROLE_ADMIN');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get id
|
||||
*
|
||||
@ -85,4 +109,26 @@ class User
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set password
|
||||
*
|
||||
* @param string $password
|
||||
* @return User
|
||||
*/
|
||||
public function setPassword($password)
|
||||
{
|
||||
$this->password = $password;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get password
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPassword()
|
||||
{
|
||||
return $this->password;
|
||||
}
|
||||
}
|
30
src/GergelyPolonkai/FrontBundle/Form/PostType.php
Normal file
30
src/GergelyPolonkai/FrontBundle/Form/PostType.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace GergelyPolonkai\FrontBundle\Form;
|
||||
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
||||
|
||||
class PostType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options)
|
||||
{
|
||||
$builder
|
||||
->add('title')
|
||||
->add('content', 'ckeditor')
|
||||
;
|
||||
}
|
||||
|
||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
||||
{
|
||||
$resolver->setDefaults(array(
|
||||
'data_class' => 'GergelyPolonkai\FrontBundle\Entity\Post'
|
||||
));
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return 'gergelypolonkai_frontbundle_posttype';
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
{% extends 'GergelyPolonkaiFrontBundle:Default:front_base.html.twig' %}
|
||||
|
||||
{% block content %}
|
||||
<h3>Bejelentkezés</h3>
|
||||
{% if error %}
|
||||
<div id="error">{{ error }}</div>
|
||||
{% endif %}
|
||||
<form method="post" action="{{ path('GergelyPolonkaiFrontBundle_adminLoginCheck') }}">
|
||||
<input type="text" name="_username" vale="{{ last_username }}" />
|
||||
<input type="password" name="_password" />
|
||||
<button type="submit">Login</button>
|
||||
</form>
|
||||
{% endblock %}
|
@ -0,0 +1,8 @@
|
||||
{% extends 'GergelyPolonkaiFrontBundle:Default:front_base.html.twig' %}
|
||||
|
||||
{% block content %}
|
||||
<form method="post" action="{{ path('GergelyPolonkaiFrontBundle_adminNewBlogPost') }}">
|
||||
{{ form_widget(form) }}
|
||||
<button type="submit">Save</button>
|
||||
</form>
|
||||
{% endblock content %}
|
23
src/GergelyPolonkai/FrontBundle/Service/CryptEncoder.php
Normal file
23
src/GergelyPolonkai/FrontBundle/Service/CryptEncoder.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
namespace GergelyPolonkai\FrontBundle\Service;
|
||||
|
||||
use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;
|
||||
use JMS\DiExtraBundle\Annotation as DI;
|
||||
|
||||
/**
|
||||
* Description of CryptEncoder
|
||||
*
|
||||
* @author polonkai.gergely
|
||||
*
|
||||
* @DI\Service("gergely_polonkai_front.service.crypt_encoder")
|
||||
*/
|
||||
class CryptEncoder implements PasswordEncoderInterface
|
||||
{
|
||||
public function encodePassword($raw, $salt) {
|
||||
return crypt($raw);
|
||||
}
|
||||
|
||||
public function isPasswordValid($encoded, $raw, $salt) {
|
||||
return (crypt($raw, $encoded) === $encoded);
|
||||
}
|
||||
}
|
@ -35,6 +35,7 @@ class GeshiHighlight extends \Twig_Extension
|
||||
$this->geshi->set_source($code);
|
||||
$this->geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS);
|
||||
$this->geshi->enable_keyword_links(false);
|
||||
$this->geshi->set_overall_class("code");
|
||||
$this->geshi->enable_classes();
|
||||
|
||||
return $this->geshi->parse_code();
|
||||
|
Loading…
Reference in New Issue
Block a user