master

laravel/framework

Last updated at: 29/12/2023 09:25

EncryptedStore.php

TLDR

The EncryptedStore.php file is a part of the Illuminate\Session namespace in the Demo Projects project. It contains a class called EncryptedStore that extends the Store class. The EncryptedStore class is responsible for encrypting and decrypting session data using an instance of the Encrypter class. It also provides methods to prepare session data for serialization and storage.

Methods

__construct

The __construct method is the constructor of the EncryptedStore class. It initializes the encrypter property and calls the parent constructor of the Store class.

prepareForUnserialize

The prepareForUnserialize method takes a raw string of session data and prepares it for unserialization. It decrypts the data using the encrypter instance. If decryption fails, it returns an empty array or JSON-encoded empty array based on the serialization option.

prepareForStorage

The prepareForStorage method takes serialized session data and prepares it for storage. It encrypts the data using the encrypter instance.

getEncrypter

The getEncrypter method returns the encrypter instance used by the EncryptedStore class.

<?php

namespace Illuminate\Session;

use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Contracts\Encryption\Encrypter as EncrypterContract;
use SessionHandlerInterface;

class EncryptedStore extends Store
{
    /**
     * The encrypter instance.
     *
     * @var \Illuminate\Contracts\Encryption\Encrypter
     */
    protected $encrypter;

    /**
     * Create a new session instance.
     *
     * @param  string  $name
     * @param  \SessionHandlerInterface  $handler
     * @param  \Illuminate\Contracts\Encryption\Encrypter  $encrypter
     * @param  string|null  $id
     * @param  string  $serialization
     * @return void
     */
    public function __construct($name, SessionHandlerInterface $handler, EncrypterContract $encrypter, $id = null, $serialization = 'php')
    {
        $this->encrypter = $encrypter;

        parent::__construct($name, $handler, $id, $serialization);
    }

    /**
     * Prepare the raw string data from the session for unserialization.
     *
     * @param  string  $data
     * @return string
     */
    protected function prepareForUnserialize($data)
    {
        try {
            return $this->encrypter->decrypt($data);
        } catch (DecryptException) {
            return $this->serialization === 'json' ? json_encode([]) : serialize([]);
        }
    }

    /**
     * Prepare the serialized session data for storage.
     *
     * @param  string  $data
     * @return string
     */
    protected function prepareForStorage($data)
    {
        return $this->encrypter->encrypt($data);
    }

    /**
     * Get the encrypter instance.
     *
     * @return \Illuminate\Contracts\Encryption\Encrypter
     */
    public function getEncrypter()
    {
        return $this->encrypter;
    }
}