actionhero-oauth2-provider

ActionHero OAuth2 Provider

Usage no npm install needed!

<script type="module">
  import actionheroOauth2Provider from 'https://cdn.skypack.dev/actionhero-oauth2-provider';
</script>

README

actionhero OAuth2 provider

Create a OAuth2 provider/server with actionhero

Install:

npm install actionhero-oauth2-provider

create a new initializer inside your actionhero project.

e.g. oauth2.js with the following content

var OAuth2Provider = require('actionhero-oauth2-provider');

var provider = new OAuth2Provider(); 



provider.on('validate_user', function(api, connection, next){
  var authorize_url = connection.params.authorize_url;
  if(/*the user is logged in.*/){
    next();
  }else{
    //redirect to the login page
    res.writeHead(303, {Location: '/login'});
    res.end();
    next(false);
  }
});



provider.on('validate_client', function(api, connection, next){
  var client_id = connection.params.client_id;
  
  if(/*client_id valid?*/){
    next();
  }else{
    connection.error = 'invalid client id!';
    next(false);
  }
});


provider.on('validate_grant', function(api, connection, next){
  var client_id = connection.params.client_id;
  var user_id = connection.session.user_id;
  
  if(/*grants exists?*/){
    next();
  }else{
    //redirect
    res.writeHead(303, {Location: '/grant'});
    res.end();
    next(false);
  }
});


provider.on('validate_code', function(api, connection, next){
  var client_id = connection.params.client_id;
  var code = connection.params.code;
  
  if(/*code is valid?*/){
    next();
  }else{
    connection.error = 'invalid code!';
    next(false);
  }
});


provider.on('validate_access_token', function(api, connection, next){
  var client_id = connection.params.client_id;
  var access_token = connection.params.access_token;
  
  if(/*access_token is valid?*/){
    //set session variables here if needed
    next();
  }else{
    connection.error = 'invalid access_token!';
    next(false);
  }
});




provider.on('save_code', function(api, connection, next){
  var user_id = connection.session.user_id;
  var client_id = connection.params.client_id;
  var code = connection.params.code;
  
  //save code here
  next();
});


provider.on('destroy_code', function(api, connection, next){
  var client_id = connection.params.client_id;
  var code = connection.params.code;
  
  //destroy code here
  next();
});



provider.on('save_access_token', function(api, connection, next){
  var client_id = connection.params.client_id;
  var code = connection.params.code;
  var access_token = connection.params.access_token;
  
  //save access_token here
  next();
});


//export the initializer for actionhero
exports.oauth2 = provider.initializer;