Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Aug 17, 2025. It is now read-only.
/PhlyPastePublic archive

Pastebin module for ZF2 applications

NotificationsYou must be signed in to change notification settings

phly/PhlyPaste

Repository files navigation

⚠️Archived 2025-08-17

Use at your own risk.

This is a module implementing a ZF2 pastebin.

Features

  • Normal pastebin features: syntax highlighting by language, short URLs, abilityto mark pastes as "private" (meaning they do not show up in listings).

  • Ability to specify "markdown" as the language; this will pass the pastethrough the markdown parser to generate markup.

  • Ability to specify "sections" of code, and thus paste multiple "files" in thesame paste. Any line starting with "##" signifies a section. The section willcontain any text following "##" as the title:

    test.txt

    This is the first section.

    test2.txt

    This is the second section.

    Additionally, if you place a language name in brackets, that language will beused for syntax highlighting for that section:

    test.js [javascript]

    {"text": "highlighted as javascript"}

    test.php [php]

    echo "This is highlighted as PHP";

    Developers familiar with pastie.org will find the above syntax familiar.

  • An API for listing pastes, retrieving individual paste details, and submittingpastes. The paste retrieval portion of the API does not require authorization,but submitting a paste requires an authorization token. (See the sectiontitled "API" below for details.

Installation

Install via composer:

{"minimum-stability":"dev","repositories":[{"type":"composer","url":"http://packages.zendframework.com/"}],"require":{"phly/phly-paste":"dev-master"}}

To allow Markdown as a type of markup, you'll also need to installEdpMarkdown. This can be done with the following:

cd vendorgit clone --recursive git://github.com/EvanDotPro/EdpMarkdown.git

Next, addEdpMarkdown to your modules array inconfig/application.config.php.

Mongo Usage

To use Mongo as a backend, you will need to do several things.

First, add "phly/phly-mongo" as acomposer.json requirement:

{"minimum-stability":"dev""require":{"phly/phly-paste":"dev-master","phly/phly-mongo":"dev-master"}}

After runningphp composer.phar update, you'll also need to configure yourapplication to use Mongo. One easy way to do this is in your site's primarymodule (usually "Application"):

namespaceApplication;usePhlyMongo\MongoDbFactory;usePhlyMongo\MongoCollectionFactory;usePhlyPaste\MongoPasteService;class Module{publicfunctiongetServiceConfig()    {returnarray('factories' =>array('Paste\Mongo'           =>'PhlyMongo\MongoConnectionFactory','Paste\MongoDb'         =>newMongoDbFactory('site','Paste\Mongo'),'Paste\MongoCollection' =>newMongoCollectionFactory('pastes','Paste\MongoDb'),'PhlyPaste\MongoService' =>function ($services) {$collection =$services->get('Paste\MongoCollection');returnnewMongoPasteService($collection);           },        ));    }}

Alternately, you can simply configure a service returning aMongoCollection,and pass that to theMongoPasteService constructor.

Make sure to create indices on each of the "hash" and "timestamp" fields:

// Create a unique index on the "hash" field$collection->ensureIndex(array('hash' =>1),array('unique' =>true));// Create an index on "timestamp" descending$collection->ensureIndex(array('timestamp' => -1));

You can do the above in your factory, if desired.

Zend\Db\TableGateway Usage

Currently, only SQLite is supported. To set up your database, do the followingfrom your application root:

sqlite data/paste.db< vendor/phly/phly-paste/config/schema.sqlite.sql

Make sure thedata/paste.db file is writeable by your webserver.

Then create the following configuration in yourconfig/autoload/global.phpfile (or some other autoloadable configuration file in that directory):

returnarray('db' =>array('driver' =>'Pdo','dsn'    =>'sqlite:' .getcwd() .'/data/paste.db',    ),'service_manager' =>array('aliases' =>array('PhlyPaste\PasteService' =>'PhlyPaste\TableGatewayService',        ),'factories' =>array('Zend\Db\Adapter\Adapter' =>'Zend\Db\Adapter\AdapterServiceFactory',        ),    ),);

Once this is in place, you should be able to create and lists pastes.

CAPTCHA setup

By default, the "Dumb" CAPTCHA adapter is used. You can setup an alternate oneby providing either global or local configuration under the "phly_paste" key's"captcha" subkey. Configuration is consistent withZend\Captcha\Factory:

returnarray('phly_paste' =>array('captcha' =>array('class' =>'CaptchaClassName','options' =>array(/* array of adapter-specific options */),        ),    ),);

You can disable CAPTCHA for authenticated users. To do this, you need to definean alias namedPhlyPaste\AuthService that points to a service returning aZend\Authentication\AuthenticationService instance. Once enabled, CAPTCHAswill no longer be displayed for currently authenticated users.

API

An API is also enabled for this module. By default, it goes to the routedescribed by the path '/paste/api/paste'. The API is JSON only, and expects thatthe Accept header matches against the media type 'application/hal+json' (it alsoallows 'application/json', but 'application/hal+json' will always be returned).

The following operations are available:

GET /paste/api/paste[?page=X]

Retrieves a single page of a list of pastes. The payload looks like thefollowing:

HTTP/1.0 200 OkContent-Type: application/json{    "_links": {        "canonical": {"rel": "canonical", "href": "http://pages.local/paste"},        "self": {"rel": "self", "href": "http://pages.local/paste/api/paste"},        "first": {"rel": "first", "href": "http://pages.local/paste/api/paste"},        "last": {"rel": "last", "href": "http://pages.local/paste/api/paste?page=X"},        "next": {"rel": "next", "href": "http://pages.local/paste/api/paste?page=2"}    },    "items": [        [            {"rel": "canonical", "href": "http://pages.local/paste/XYZ"},            {"rel": "item", "href": "http://pages.local/paste/api/paste/XYZ"}        ],        /* ... */    ]}

GET /paste/api/paste/XYZ12ABC

Fetches information on a single paste. The payload looks like the following:

HTTP/1.0 200 OkContent-Type: application/json{    "_links": {        "canonical": {"rel": "canonical", "href": "http://pages.local/paste/XYZ12ABC"},        "self": {"rel": "self", "href": "http://pages.local/paste/api/paste/XYZ12ABC"},        "up": {"rel": "up", "href": "http://pages.local/paste/api/paste"}    },    "title": "...",    "language": "...",    "timestamp": "...",}

POST /paste/api/paste

Expects a JSON body, like the following:

Accept: application/jsonContent-Type: application/jsonX-PhlyPaste-Token: yourtoken{    "language": "txt",    "private": "false",    "content": "This is the paste content..."}

You will get the following response payload:

HTTP/1.0 201 CreatedLocation: http://paste.local/paste/XYZ12ABCContent-Type: application/json{    "_links": {        "canonical": {"rel": "canonical", "href": "http://pages.local/paste/XYZ12ABC"},        "self": {"rel": "self", "href": "http://pages.local/paste/api/paste/XYZ12ABC"}    }}

Authorization Tokens for Submitting Pastes

As you may have noticed in the previous example, the POST operation requires an"X-PhlyPaste-Token" header. Tokens are verified against thePhlyPaste\TokenService service, which is simply aPhlyPaste\Model\TokenServiceInterface implementation. By default, a singleimplementation is provided,PhlyPaste\Model\ArrayTokenService. Thisimplementation expects that the configuration includes tokens:

returnarray('phly_paste' =>array('tokens' =>array('yourtoken',        ),    ),);

If you use this approach, make sure that tokens are defined in.local.phpfiles that are stored outside your repository.

Alternately, you may create your own implementation of theTokenServiceInterface that can be used to verify tokens.

About

Pastebin module for ZF2 applications

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors2

  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp