2017 © Pedro Peláez
 

library atlassian-connect-core

Atlassian Connect Framework to build add-on for the JIRA and Confluence

image

brezzhnev/atlassian-connect-core

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  • Monday, February 12, 2018
  • by brezzhnev
  • Repository
  • 5 Watchers
  • 15 Stars
  • 1,902 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 7 Forks
  • 0 Open issues
  • 11 Versions
  • 48 % Grown

The README.md

Atlassian Connect Core

Latest Version on Packagist ![Software License][ico-license] Build Status ![Quality Score][ico-code-quality] Total Downloads, (*1)

The easiest way to create an add-on for JIRA and Confluence., (*2)

Version Compatibility

Laravel Package
5.5.x 1.2.x
6.x 1.3.x

Getting Started

Installing

Install dependency via Composer, (*3)

``` bash $ composer require "brezzhnev/atlassian-connect-core", (*4)


Register **route middleware** `jwt` by adding to `app\Http\Kernel.php` the following line: ``` php 'jwt' => \AtlassianConnectCore\Http\Middleware\JWTAuth::class

Set the authentication driver to jwt in config/auth.php:, (*5)

``` php 'guards' => [ 'web' => [ 'driver' => 'jwt', 'provider' => 'users', ], ..., (*6)


Set the model class in `config/auth.php` **providers** section: ``` php 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => \AtlassianConnectCore\Models\Tenant::class, ], ...

Register the subscriber in the app/Providers/EventServiceProvider.php:, (*7)

``` php /** * The subscriber classes to register. * * @var array */ protected $subscribe = [ \AtlassianConnectCore\Listeners\PluginEventSubscriber::class ];, (*8)


Configure the database and run:

php artisan migrate php artisan plugin:install, (*9)


The command `php artisan plugin:install` will publish config, views and resources that you can change for your needs. Also, it will create "dummy" tenant needed for local testing and developing without needing of installing the add-on on real JIRA or Confluence instances. ### Publishing as an add-on > If your application returns the add-on descriptor on the request to URL `http://localhost:8000/atlassian-connect.json` it means you are close to happiness and you can install the add-on. **Step 1. Make your application accessible** To install the add-on in the instance, you should be visible through the internet. For testing purposes the easiest way is to use [ngrok](https://ngrok.com/). Then you have it accessible, put your actual website URL to environment variable `PLUGIN_URL`. > Make sure your add-on is accessible via **HTTPS**, it is a requirement. **Step 2. Configure your JIRA / Confluence instance** Configure your add-on using `config/plugin.php`. Most values may be overwritten using env vars. **Step 3. Upload your add-on** Finally, you need to upload the add-on. Click "Upload add-on" and paste your public URL with descriptor path, eg. `https://d1ea31ce.ngrok.io/atlassian-connect.json` or `https://yourplugindomain.com/atlassian-connect.json` **Step 4. Testing the successfulness** After the successful installation, on JIRA instance you may see "Your add-on" top menu item. You also can go to the add-on general page by direct link `:product_base_url/plugins/servlet/ac/sample-plugin/hello-page` > Instead of `:product_base_url` you should put your JIRA or Cofluence instance URL (eg. `https://google-dev.atlassian.net`). If you see page working, the application configured and add-on installed correctly. ### Publish resources Instead of using `plugin:install` you can perform actions manually. To copy all the publishes you should use the following command:

php artisan vendor:publish --provider="AtlassianConnectCore\ServiceProvider", (*10)


To copy only specific publish you must call this command with option `--tag`. The value can be `public` (to copy assets), `views` and `config`. ## Usage ### Default routes The following routes are registered by default: * `GET /atlassian-connect.json` descriptor contents * `POST /installed` add-on installed callback * `POST /uninstalled` add-on uninstalled callback * `POST /enabled` add-on enabled callback * `POST /disabled` add-on disabled callback * `GET /hello` sample page to persuade all working correctly You may disable them by setting the config value `plugin.loadRoutes` to `false`. ### Descriptor You can use `Descriptor` facade to customize or create from scratch your own descriptor contents. For example, you may customize it by adding to the `app\Providers\AppServiceProvider` in `boot` section the following: ``` php Descriptor::base() // base descriptor contents ->setScopes(['admin' , 'act_as_user']) ->withModules([ 'webhooks' => [[ 'event' => 'jira:issue_created', 'url' => route('webhookHandlerRouteName') ]] ]) ->set('version', $this->getLatestPluginVersion());

Warning: if you are using route helper in the AppServiceProvider you should have RouteServiceProvider defined above AppServiceProvider in your app.php config., (*11)

API requests

In most cases of add-on development for Atlassian Product you need to perform requests to the instance., (*12)

For this case you can use JWTClient. It uses GuzzleHttp as HTTP client., (*13)

If you want to have custom handling (middlewares etc.) you can pass client instance to the constructor., (*14)

Pagination

If you want to send a request to an endpoint with pagination you should use JWTClient::paginate method. In most cases you don't need to pass paginator instance to the JWTClient constructor because it will be instantiated automatically by resolving your Tenant product type (JIRA or Confluence), but you always can use the specific paginator., (*15)

There are two paginators supported by default: * JiraPaginator * ConfluencePaginator, (*16)

You're always able to extend Paginator class and create your own., (*17)

Examples

Get a Confluence page content, (*18)

``` php use AtlassianConnectCore\Http\Clients\JWTClient;, (*19)

/** * Retrieve a Confluence page content. * * @return array */ public function pageContent(int $id): array { $client = new JWTClient($this->tenant); // or Auth::user() if you performing a request from the instance, (*20)

return $client->get('rest/api/content/' . $id, [
    'query' => [
        'expand' => 'body.storage'
    ]
]);

}, (*21)


**Get a JIRA issue** ``` php use AtlassianConnectCore\Http\Clients\JWTClient; /** * Retrieve an issue object. * * @return array */ public function viewIssue(string $key): array { $client = new JWTClient($this->tenant); return $client->get('rest/api/2/issue/' . $key); }

Webhooks

The plugin provides a convenient way to handle incoming webhooks, based on habitual Laravel Events., (*22)

If you don't familiar with Laravel Events, please take a look at Laravel Docs, (*23)

There are two ways to define webhook listeners:, (*24)

1. Define listeners in the config/plugin.php, (*25)

``` php 'webhooks' => [ 'jira:issue_updated' => \App\Listeners\Webhooks\Issue\Created::class, ... ], (*26)


2\. Define listeners using the `Webhook` facade, for example: ``` php Webhook::listen('jira:issue_created', function(\AtlassianConnectCore\Models\Tenant $tenant, \Illuminate\Http\Request $request) { // ... });

As you can see, you can define event listener as a closure or as a string in Laravel-like syntax:, (*27)

``` php Webhook::listen('jira:issue_created', \App\Listeners\Webhooks\Issue\Created::class); Webhook::listen('jira:issue_created', 'App\Listeners\Webhooks\Issue\Created@handle');, (*28)


> You don't need to define the webhooks within your add-on descriptor, they will be described automatically. #### Example listener ``` php <?php namespace App\Listeners\Webhooks\Issue; use Illuminate\Http\Request; use AtlassianConnectCore\Models\Tenant; class Created { /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the incoming webhook. * * @param \AtlassianConnectCore\Models\Tenant $tenant * @param \Illuminate\Http\Request $request * * @return void */ public function handle(Tenant $tenant, Request $request) { // ... } }

Your event listeners may also type-hint any dependencies they need on their constructors. All event listeners are resolved via the Laravel service container, so dependencies will be injected automatically., (*29)

Console commands

  • plugin:install is a helper command that creates "dummy" tenant with the fake data and publishes package resources (config, views, assets)
  • plugin:dummy provides interactive way to set a tenant as "dummy" without manually editing database

Tests

Run the following in the package folder:, (*30)

vendor/bin/phpunit

Security

If you discover any security related issues, please email brezzhnev@gmail.com instead of using the issue tracker., (*31)

Credits

License

The MIT License (MIT). Please see License File for more information., (*32)

The Versions

12/02 2018

dev-master

9999999-dev

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

laravel atlassian confluence jira add-on brezzhnev

13/01 2018

dev-develop

dev-develop

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

laravel atlassian confluence jira add-on brezzhnev

13/01 2018

v1.2.2

1.2.2.0

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

laravel atlassian confluence jira add-on brezzhnev

13/01 2018

dev-release/1.2.2

dev-release/1.2.2

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

laravel atlassian confluence jira add-on brezzhnev

13/01 2018

dev-feature/webhooks

dev-feature/webhooks

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

laravel atlassian confluence jira add-on brezzhnev

03/01 2018

v1.2.1

1.2.1.0

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

laravel atlassian confluence jira add-on brezzhnev

24/09 2017

v1.2.0

1.2.0.0

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

laravel atlassian confluence jira add-on brezzhnev

08/09 2017

v1.1.0

1.1.0.0

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

laravel atlassian confluence jira add-on brezzhnev

06/09 2017

v1.0.2

1.0.2.0

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

laravel atlassian confluence jira add-on brezzhnev

04/09 2017

v1.0.1

1.0.1.0

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

laravel atlassian confluence jira add-on brezzhnev

04/09 2017

v1.0.0

1.0.0.0

Atlassian Connect Framework to build add-on for the JIRA and Confluence

  Sources   Download

MIT

The Requires

 

The Development Requires

by Artem Brezhnev

atlassian confluence jira brezzhnev