epersonate 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/README.md +74 -0
- data/epersonate.gemspec +14 -0
- data/lib/epersonate.rb +41 -0
- metadata +46 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4f5397d177275ef4d9bd5832af1859a947cd70555667355277ebdc80c097c18c
|
4
|
+
data.tar.gz: 13a56d530a8c5df1b9ff4a4b33a3712c9b6f08d17a05f1b1251300a0a684c101
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5c0b65470e93e13144fd5e781fb1a16ab088a7123b1fafcc7acd65ccc3ea98ac2ea9c855bc273d77e4e23f3704865102d7217a9b7fde3443fa54b90448d897fa
|
7
|
+
data.tar.gz: c8ad1da890e855008b64015218d08a03059f52361d441acad4fb18339dc03c4ca255a664351f5ac48b811a5043b5f88784bdeea87b8889c8b5493ec912aec17d
|
data/.gitignore
ADDED
data/README.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# Epersonate Gem
|
2
|
+
|
3
|
+
> [Official Ruby Wrapper](https://rubygems.org/gems/epersonate) for EPersonate API.
|
4
|
+
|
5
|
+
## EPersonate Documentation
|
6
|
+
|
7
|
+
[Official EPersonate Documentation](https://docs.epersonate.com)
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
```bash
|
12
|
+
gem install epersonate
|
13
|
+
```
|
14
|
+
|
15
|
+
### Usage
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
require 'epersonate'
|
19
|
+
```
|
20
|
+
|
21
|
+
### Using Personal Access Token
|
22
|
+
|
23
|
+
Go to https://epersonate.com/app/settings > Personal Access Token > Create Personal Access Token
|
24
|
+
|
25
|
+
Add this token to your environment variables.
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
epersonate = Epersonate.new(EPERSONATE_TOKEN)
|
29
|
+
```
|
30
|
+
|
31
|
+
**Note: Replace `EPERSONATE_TOKEN` with the token generated before.**
|
32
|
+
|
33
|
+
## Example Usage
|
34
|
+
|
35
|
+
In a classic Rails application with a `sessions_controller.rb`
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
class SessionsController < ApplicationController
|
39
|
+
|
40
|
+
def login
|
41
|
+
(...)
|
42
|
+
current_user(user)
|
43
|
+
end
|
44
|
+
|
45
|
+
def current_user=(user)
|
46
|
+
@current_user = user
|
47
|
+
end
|
48
|
+
|
49
|
+
def current_user
|
50
|
+
if (@current_user)
|
51
|
+
return @current_user
|
52
|
+
end
|
53
|
+
|
54
|
+
impersonation = epersonate.verify({request: request})
|
55
|
+
|
56
|
+
if (impersonation["valid"])
|
57
|
+
@current_user = User.find(impersonation["userId"].to_i)
|
58
|
+
else
|
59
|
+
remember_token = User.hexdigest(cookies[:remember_token])
|
60
|
+
@current_user ||= User.find_by(remember_token: remember_token)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
|
67
|
+
## Deploy
|
68
|
+
|
69
|
+
- Update version in epersonate.gemspec
|
70
|
+
|
71
|
+
```bash
|
72
|
+
gem build epersonate.gemspec
|
73
|
+
gem push epersonate.x.x.x.gem
|
74
|
+
```
|
data/epersonate.gemspec
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
Gem::Specification.new do |s|
|
3
|
+
s.name = 'epersonate'
|
4
|
+
s.version = "0.0.1"
|
5
|
+
s.date = '2020-07-28'
|
6
|
+
s.summary = "Epersonate Ruby API Wrapper"
|
7
|
+
s.description = "Epersonate Ruby API Wrapper"
|
8
|
+
s.authors = ["Kevin Antoine"]
|
9
|
+
s.email = 'kevin@epersonate.com'
|
10
|
+
s.files = `git ls-files`.split("\n")
|
11
|
+
s.require_paths = ["lib"]
|
12
|
+
s.homepage = 'https://rubygems.org/gems/epersonate'
|
13
|
+
s.license = 'MIT'
|
14
|
+
end
|
data/lib/epersonate.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
BASE_URL = "https://api.epersonate.com"
|
6
|
+
EPERSONATE_HEADER = 'x-epersonate';
|
7
|
+
|
8
|
+
class Epersonate
|
9
|
+
def initialize(token)
|
10
|
+
@personal_access_token = token
|
11
|
+
end
|
12
|
+
|
13
|
+
def verify(args)
|
14
|
+
token = args[:token] || (args[:request] && args[:request].cookies[EPERSONATE_HEADER])
|
15
|
+
unless token
|
16
|
+
return {
|
17
|
+
valid: false
|
18
|
+
}
|
19
|
+
end
|
20
|
+
uri = URI.parse(BASE_URL + "/api/v1/impersonations")
|
21
|
+
header = {
|
22
|
+
'Content-Type': 'application/json',
|
23
|
+
'Authorization': "Bearer " + @personal_access_token
|
24
|
+
}
|
25
|
+
body = {
|
26
|
+
token: token
|
27
|
+
}
|
28
|
+
|
29
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
30
|
+
req = Net::HTTP::Post.new(uri.request_uri, header)
|
31
|
+
req.body = body.to_json
|
32
|
+
response = http.request(req)
|
33
|
+
if response.code == "200"
|
34
|
+
return ActiveSupport::JSON.decode(response.body)
|
35
|
+
end
|
36
|
+
|
37
|
+
return {
|
38
|
+
valid: false
|
39
|
+
}
|
40
|
+
end
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: epersonate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kevin Antoine
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-28 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Epersonate Ruby API Wrapper
|
14
|
+
email: kevin@epersonate.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- ".gitignore"
|
20
|
+
- README.md
|
21
|
+
- epersonate.gemspec
|
22
|
+
- lib/epersonate.rb
|
23
|
+
homepage: https://rubygems.org/gems/epersonate
|
24
|
+
licenses:
|
25
|
+
- MIT
|
26
|
+
metadata: {}
|
27
|
+
post_install_message:
|
28
|
+
rdoc_options: []
|
29
|
+
require_paths:
|
30
|
+
- lib
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubygems_version: 3.1.2
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: Epersonate Ruby API Wrapper
|
46
|
+
test_files: []
|