Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement license activation hook #2

Open
thecatontheflat opened this issue Jun 27, 2015 · 5 comments
Open

Implement license activation hook #2

thecatontheflat opened this issue Jun 27, 2015 · 5 comments

Comments

@thecatontheflat
Copy link
Owner

No description provided.

@zhil
Copy link
Contributor

zhil commented May 5, 2016

@thecatontheflat just wonder - does atlassian connect have hook for licence activation/deactivation?

Right now we use this bundle for cloud application and we do not get "lic" flag in _GET request.
As a solution I propose such a way

  1. add flag licenceState to Tenant entity (smallint) + constants for statuses
    STATUS_UNKNOWN (default)
    STATUS_ACTIVE
    STATUS_EXPIRED

  2. in Listener/LicenceListener if system get "lic" field - update licence status in Tenant entity

  3. add console command CheckLicenceCommand, it get all tenants and update states using code like

$tenant = $this->getContainer()->get("doctrine")->getManager()->find("AtlassianConnectBundle:Tenant",1);
        $jwtRequest = new JWTRequest($tenant);
        var_dump($jwtRequest->get("/rest/atlassian-connect/latest/addons/".$tenant->getAddonKey()));

SAMPLE REST RESPONSE

array(5) {
  ["key"]=>
  string(33) "...skipped..."
  ["version"]=>
  string(8) "1.0.0-AC"
  ["state"]=>
  string(7) "ENABLED"
  ["host"]=>
  array(2) {
    ["product"]=>
    string(4) "JIRA"
    ["contacts"]=>
    array(1) {
      [0]=>
      array(2) {
        ["name"]=>
        string(6) "Andrew"
        ["email"]=>
        string(21) "...skipped..."
      }
    }
  }
  ["links"]=>
  array(2) {
    ["marketplace"]=>
    array(1) {
      [0]=>
      array(1) {
        ["href"]=>
        string(75) "...skipped..."
      }
    }
    ["self"]=>
    array(1) {
      [0]=>
      array(1) {
        ["href"]=>
        string(94) "...skipped..."
      }
    }
  }
}

What do you think about such an implementation?

@thecatontheflat
Copy link
Owner Author

Hey @zhil

does atlassian connect have hook for licence activation/deactivation?

I think I was referring to connect_addon_disabled and connect_addon_enabled hooks.

we do not get "lic" flag in _GET request

Most likely you're not getting lic param in the query, because you don't set license enabled in your descriptor. Could you confirm it is not the case?

Regarding storing the license in the Tenant — I am not sure about this, because I would like to rely on the request data. If you need to double-check the license status — you should request a license end-point

@zhil
Copy link
Contributor

zhil commented May 5, 2016

@thecatontheflat

I think I was referring to connect_addon_disabled and connect_addon_enabled hooks.

well, as I understand, enabling/disabling licence is actually not the same, as licence expiration. But I will test it more

Most likely you're not getting lic param in the query, because you don't set license enabled in your
descriptor. Could you confirm it is not the case?

Its not the case. Jira simply doesnt set that flag for webhooks.

Regarding storing the license in the Tenant — I am not sure about this, because I would like to rely
on the request data. If you need to double-check the license status — you should request a license

We get a lot of webhook calls, checking licence each time is not a solution. It should be either updated by hook or checked from cron. Anyway, licence state should be stored somewhere, tenant entity looks like logical location.

@thecatontheflat
Copy link
Owner Author

Ah, I didn't get it at first that the flag is missing in the webhook.

Yeah, in this case I think your proposal would work.

I suggest to store licenseEnabled as nullable boolean instead of having 3 states there. NULL would stand for the unknown.

What do you think?

@zhil
Copy link
Contributor

zhil commented May 5, 2016

@thecatontheflat I will need to do some tests and check if enabled/disabled is the same as expired/active.
If its the same - nullable boolean licenseEnabled would work
If its not the same - probably I will add some flag like status with const
null = unknown
STATUS_ACTIVE
STATUS_EXPIRED
STATUS_DISABLED

because expired and disabled states plugin could handle in different ways.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants