fidor_starter_kits 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/fidor_starter_kits/version.rb +1 -1
- data/lib/fidor_starter_kits.rb +26 -1
- data/spec/fidor_starter_kits_spec.rb +17 -1
- data/starter_kits/golang_plain/.fidor_meta.json +7 -0
- data/starter_kits/golang_plain/README.md +27 -0
- data/starter_kits/golang_plain/example.go +156 -9
- data/starter_kits/java_servlet/.fidor_meta.json +7 -0
- data/starter_kits/node_tx/.fidor_meta.json +7 -0
- data/starter_kits/php_plain/.fidor_meta.json +7 -0
- data/starter_kits/php_plain/README.md +13 -2
- data/starter_kits/php_plain/example.php +4 -3
- data/starter_kits/sinatra_plain/.fidor_meta.json +7 -0
- data/starter_kits/sinatra_plain/README.md +13 -3
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cadf95388bb8c66509a1fe4bb7f97a602ed97336
|
4
|
+
data.tar.gz: eba96a1ff9e37cc594a8515464b597e0d9f00eea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c74727119b8ec44167a91fcbebd587931d124ee2b5754ce8559f6059077f059277e35eeaf2a990e0fd929b8bee84bedc984473e4a1a764bdc5d5781f5a3aa23
|
7
|
+
data.tar.gz: 524b14ea5fee55c16565133a04cd848134bba62c966a4be79261acb3f05cce3a1c69925e1cbd069e9670883f9cc9868f48734728a051faa8c6c10d96c9e320b1
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
This repo features fidor application examples. The apps use oAuth to
|
4
4
|
authenticate with fidor, so you must register an app at fidor first to get your
|
5
5
|
personal app credentials.
|
6
|
-
Afterwards just copy
|
6
|
+
Afterwards just copy one of the /starter_kits, add your app credentials to the
|
7
7
|
example source and start to play.
|
8
8
|
|
9
9
|
For Ruby Heros, this repo is also available as ruby gem and provides a tiny
|
data/lib/fidor_starter_kits.rb
CHANGED
@@ -2,6 +2,7 @@ require 'fidor_starter_kits/version'
|
|
2
2
|
require 'fileutils'
|
3
3
|
require 'tmpdir'
|
4
4
|
require 'zip'
|
5
|
+
require 'json'
|
5
6
|
|
6
7
|
module FidorStarterKits
|
7
8
|
|
@@ -31,7 +32,7 @@ module FidorStarterKits
|
|
31
32
|
# @return [Nil | String] path to zipped example im /tmp folder or nil if app does not exists
|
32
33
|
def build(opts)
|
33
34
|
app_name = opts[:app_name]
|
34
|
-
return if !app_name || !exists?(app_name) || !
|
35
|
+
return if !app_name || !exists?(app_name) || !(STARTER_KITS).include?(app_name)
|
35
36
|
|
36
37
|
# move example to a safe location
|
37
38
|
example_src_path = File.join(path, app_name)
|
@@ -59,5 +60,29 @@ module FidorStarterKits
|
|
59
60
|
zip_file_path
|
60
61
|
end
|
61
62
|
|
63
|
+
def all
|
64
|
+
@conf ||= {}
|
65
|
+
return @conf unless @conf.length == 0
|
66
|
+
|
67
|
+
STARTER_KITS.each do |kit|
|
68
|
+
base = File.join(path, kit)
|
69
|
+
meta = File.join(base, ".fidor_meta.json")
|
70
|
+
if File.exists? meta
|
71
|
+
File.open(meta) {|f| @conf[kit] = JSON.parse(f.read)}
|
72
|
+
else
|
73
|
+
@conf[kit] = "meh"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
return @conf
|
77
|
+
end
|
78
|
+
|
79
|
+
def get app_name
|
80
|
+
all[app_name]
|
81
|
+
end
|
82
|
+
|
83
|
+
def each
|
84
|
+
all.each_value { |conf| yield conf }
|
85
|
+
end
|
86
|
+
|
62
87
|
end
|
63
88
|
end
|
@@ -48,4 +48,20 @@ describe FidorStarterKits do
|
|
48
48
|
expect( content ).to include 'fidor-oauth-url'
|
49
49
|
end
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
|
+
describe '.all' do
|
53
|
+
it 'lists all starter kits' do
|
54
|
+
expect(FidorStarterKits.all.count).to eq(FidorStarterKits::STARTER_KITS.size)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'loads the json meta data' do
|
58
|
+
conf = FidorStarterKits.all
|
59
|
+
expect(conf["golang_plain"]["display_name"]).to eq("Go Plain")
|
60
|
+
expect(conf["node_tx"]["description"]).to eq("A simple nodejs based app, showing how to get user transactions")
|
61
|
+
expect(conf["php_plain"]["app_name"]).to eq("php_plain")
|
62
|
+
expect(conf["sinatra_plain"]["app_url"]).to eq("http://localhost:4567")
|
63
|
+
expect(conf["java_servlet"]["callback_urls"]).to eq("http://localhost:8080/JavaServlet/Example")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Basic Go Example
|
2
|
+
|
3
|
+
This is a basic example project that demonstrates the Fidor API OAuth
|
4
|
+
flow. It provides the same functionality as the php example if you would
|
5
|
+
like to compare the two sample projects.
|
6
|
+
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
In order to run the example you'll need a Go environment installed (see
|
10
|
+
www.golang.org) and can start the sample with:
|
11
|
+
|
12
|
+
go run example.go
|
13
|
+
|
14
|
+
The server will listen on port 8080, you can access the example in your
|
15
|
+
browser under the following URL:
|
16
|
+
|
17
|
+
http://localhost:8080
|
18
|
+
|
19
|
+
## Configuration
|
20
|
+
|
21
|
+
In case you downloaded this project from the Fidor AppManager, all the
|
22
|
+
configuration should have already been set up for you. In case you
|
23
|
+
retrieved this example from another source, you'll need to open the
|
24
|
+
`example.go` file and fill in the configuration values at the top of the
|
25
|
+
file. You will be able to find out the values in the AppManager, create
|
26
|
+
a new App and use the configuration from the new App's detail page.
|
27
|
+
|
@@ -1,21 +1,168 @@
|
|
1
|
+
package main
|
2
|
+
|
3
|
+
// This is a basic example to illustrate how to access the Fidor API
|
4
|
+
// using Go.
|
5
|
+
//
|
6
|
+
// To run this example type:
|
7
|
+
//
|
8
|
+
// $ go run example.go
|
9
|
+
//
|
10
|
+
// And point your browser to:
|
11
|
+
//
|
12
|
+
// $ http://localhost:8080
|
13
|
+
|
1
14
|
import (
|
15
|
+
"encoding/json"
|
2
16
|
"fmt"
|
3
|
-
"io/ioutil"
|
4
17
|
"net/http"
|
18
|
+
"net/url"
|
5
19
|
)
|
6
20
|
|
21
|
+
// The following sections define the settings you require for the
|
22
|
+
// app to be able to connect to and authorize itself against the api.
|
23
|
+
|
24
|
+
// app ID and secret, can be found in this apps "Details" page in the
|
25
|
+
// AppManager.
|
26
|
+
var client_id = "<CLIENT_ID>"
|
27
|
+
var client_secret = "<CLIENT_SECRET>"
|
28
|
+
|
29
|
+
// Fidor's OAuth Endpoint (this changes between Sandbox and Production)
|
30
|
+
var fidor_oauth_url = "<FIDOR_OAUTH_URL>" // e.g https://fidor.com/api_sandbox/oauth
|
31
|
+
// The OAuth Endpoint this App provides
|
32
|
+
var oauth_cb_url = "<APP_URL>"
|
33
|
+
|
34
|
+
// The URL of the Fidor API (this changes between Sandbox and
|
35
|
+
// Production)
|
36
|
+
var fidor_api_url = "<FIDOR_API_URL>" // e.g https://fidor.com/api_sandbox vs /api
|
37
|
+
|
38
|
+
|
39
|
+
|
7
40
|
|
8
41
|
func main() {
|
9
|
-
|
10
|
-
|
42
|
+
// register a handler function (see next function) to service
|
43
|
+
// requests ...
|
44
|
+
http.HandleFunc("/", indexHandler)
|
45
|
+
// ... and start listening.
|
46
|
+
http.ListenAndServe(":8080", nil)
|
47
|
+
}
|
48
|
+
|
49
|
+
func indexHandler(w http.ResponseWriter, r *http.Request) {
|
50
|
+
|
51
|
+
// ignore any favicon requests, etc.
|
52
|
+
if r.URL.Path != "/" {
|
53
|
+
w.WriteHeader(404)
|
54
|
+
return
|
55
|
+
}
|
56
|
+
|
57
|
+
// check whether we have a GET parameter named `code`, if so,
|
58
|
+
// this is a redirect back from the Fidor OAuth server.
|
59
|
+
values := r.URL.Query()
|
60
|
+
if values["code"] != nil {
|
61
|
+
// retrieve the actual OAuth access token ....
|
62
|
+
code := values.Get("code")
|
63
|
+
if token, err := retrieveTokenFromCode(code); err != nil {
|
64
|
+
fmt.Printf("err: %v\n", err)
|
65
|
+
w.WriteHeader(500)
|
66
|
+
fmt.Fprintf(w, "Unfortunately, an error occured retrieving oauth token")
|
67
|
+
} else {
|
68
|
+
// ... and finally, greet the user and assemble links
|
69
|
+
renderWelcome(w, token)
|
70
|
+
}
|
71
|
+
} else {
|
72
|
+
// we don't have an oauth `code` yet, so we need to
|
73
|
+
// redirect the user to the OAuth provider to get one ...
|
74
|
+
oauth_url := fmt.Sprintf("%s/authorize?client_id=%s&redirect_uri=%s",
|
75
|
+
fidor_oauth_url,
|
76
|
+
client_id,
|
77
|
+
url.QueryEscape(oauth_cb_url))
|
78
|
+
|
79
|
+
header := w.Header()
|
80
|
+
header.Add("location", oauth_url)
|
81
|
+
w.WriteHeader(307)
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
|
86
|
+
// Our TokenResponse representation used to pick it out from the JSON
|
87
|
+
// returned by the OAuth server.
|
88
|
+
type TokenResponse struct {
|
89
|
+
Token string `json:"access_token"`
|
90
|
+
}
|
91
|
+
|
92
|
+
// Use the OAuth code that the user's browser picked up from the OAuth
|
93
|
+
// server to request an OAuth access_token to use in API requests.
|
94
|
+
func retrieveTokenFromCode(code string) (token string, err error) {
|
95
|
+
// assemble the API endpoint URL and request payload
|
96
|
+
tokenUrl := fmt.Sprintf("%s/token", fidor_oauth_url)
|
97
|
+
tokenPayload := url.Values{
|
98
|
+
"client_id": {client_id},
|
99
|
+
"client_secret": {client_secret},
|
100
|
+
"code": {code},
|
101
|
+
}
|
102
|
+
// Call API
|
103
|
+
if resp, err := http.PostForm(tokenUrl, tokenPayload); err != nil {
|
104
|
+
return "", err
|
105
|
+
} else {
|
106
|
+
// if successful, pick the access_token out of the reply.
|
107
|
+
var tokenResponse TokenResponse
|
108
|
+
decoder := json.NewDecoder(resp.Body)
|
109
|
+
if err = decoder.Decode(&tokenResponse); err != nil {
|
110
|
+
return "", err
|
111
|
+
} else {
|
112
|
+
return tokenResponse.Token, nil
|
113
|
+
}
|
114
|
+
}
|
11
115
|
}
|
12
116
|
|
13
|
-
func viewHandler(w http.ResponseWriter, r *http.Request) {
|
14
117
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
118
|
+
// Our server code only makes a single call to the API to retrieve user
|
119
|
+
// information. This is our internal representation of the returned JSON
|
120
|
+
// used to pick out the user's email.
|
121
|
+
type UserResponse struct {
|
122
|
+
Email string `json:"email"`
|
123
|
+
}
|
124
|
+
|
125
|
+
// function to retreive user information from the API
|
126
|
+
func getUser(token string) (u UserResponse, err error) {
|
127
|
+
// Assemble endpoint URL...
|
128
|
+
url := fmt.Sprintf("%s/users/current?access_token=%s", fidor_api_url, token)
|
129
|
+
if resp, err := http.Get(url); err != nil {
|
130
|
+
return u, err
|
131
|
+
} else {
|
132
|
+
decoder := json.NewDecoder(resp.Body)
|
133
|
+
if err = decoder.Decode(&u); err != nil {
|
134
|
+
return u, err
|
135
|
+
} else {
|
136
|
+
return u, nil
|
137
|
+
}
|
138
|
+
}
|
139
|
+
}
|
19
140
|
|
20
|
-
|
141
|
+
|
142
|
+
// once all the OAuth calls have been taken care of, this function is
|
143
|
+
// called from the http handler. It retrieves the user's email address
|
144
|
+
// and inserts links to `transaction` and `accounts` endpoints.
|
145
|
+
|
146
|
+
func renderWelcome(w http.ResponseWriter, token string) {
|
147
|
+
if user, err := getUser(token); err != nil {
|
148
|
+
fmt.Printf("err: %v\n", err)
|
149
|
+
w.WriteHeader(500)
|
150
|
+
} else {
|
151
|
+
txLink := fmt.Sprintf("%s/transactions?access_token=%s", fidor_api_url, token)
|
152
|
+
acctsLink := fmt.Sprintf("%s/accounts?access_token=%s", fidor_api_url, token)
|
153
|
+
fmt.Fprintf(w, indexTemplate, user.Email, token, txLink, acctsLink)
|
154
|
+
}
|
21
155
|
}
|
156
|
+
|
157
|
+
var indexTemplate = `
|
158
|
+
<html>
|
159
|
+
<head>
|
160
|
+
</head>
|
161
|
+
<body>
|
162
|
+
<h1>Welcome %s!</h1>
|
163
|
+
<i>retrieved <tt>access_token</tt>: %s</i>
|
164
|
+
<p><a href="%s">Transactions</a></p>
|
165
|
+
<p><a href="%s">Accounts</a></p>
|
166
|
+
</body>
|
167
|
+
</html>
|
168
|
+
`
|
@@ -0,0 +1,7 @@
|
|
1
|
+
{
|
2
|
+
"display_name" : "Java Servlet Plain",
|
3
|
+
"description" : "A simple java servlet based app, showing how to get the access token",
|
4
|
+
"app_name":"java_servlet",
|
5
|
+
"app_url":"http://localhost:8080/JavaServlet/Example",
|
6
|
+
"callback_urls":"http://localhost:8080/JavaServlet/Example"
|
7
|
+
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# Plain PHP Login - Example
|
2
2
|
|
3
|
-
A single view
|
3
|
+
A single view that demonstrates the Fidor API OAuth login flow and how to get
|
4
|
+
an access token.
|
4
5
|
|
5
6
|
## Usage
|
6
7
|
|
@@ -11,4 +12,14 @@ Start your local php server:
|
|
11
12
|
And point your browser to http://localhost:8000/example.php
|
12
13
|
|
13
14
|
If you run the example under a different url, please update the url in the
|
14
|
-
source file
|
15
|
+
source file
|
16
|
+
|
17
|
+
|
18
|
+
## Configuration
|
19
|
+
|
20
|
+
In case you downloaded this project from the Fidor AppManager, all the
|
21
|
+
configuration should have already been set up for you. In case you
|
22
|
+
retrieved this example from another source, you'll need to open the
|
23
|
+
`example.php` file and fill in the configuration values at the top of the
|
24
|
+
file. You will be able to find out the values in the AppManager, create
|
25
|
+
a new App and use the configuration from the new App's detail page.
|
@@ -7,6 +7,7 @@
|
|
7
7
|
$fidor_api_url = "<FIDOR_API_URL>"; # e.g https://fidor.com/api_sandbox vs /api
|
8
8
|
|
9
9
|
$code = $_REQUEST["code"];
|
10
|
+
|
10
11
|
# 1. redirect to authorize url
|
11
12
|
if(empty($code)) {
|
12
13
|
$dialog_url = $fidor_oauth_url . "/authorize?" .
|
@@ -40,10 +41,10 @@
|
|
40
41
|
$user = json_decode(file_get_contents($usr_url));
|
41
42
|
$transactions_url = $fidor_api_url . "/transactions?access_token=" . $resp->access_token;
|
42
43
|
echo( "<h2>Hello " . $user->email . "</h2>
|
43
|
-
<i>May
|
44
|
+
<i>May I present the access token response:</i>
|
44
45
|
<blockquote>");
|
45
46
|
print_r($resp);
|
46
47
|
echo("</blockquote>
|
47
|
-
<p>Now use the access token
|
48
|
+
<p>Now use the access token here: <br> <a href='" . $transactions_url . "'>".$transactions_url."</a></p>");
|
48
49
|
|
49
|
-
?>
|
50
|
+
?>
|
@@ -1,8 +1,9 @@
|
|
1
|
-
|
1
|
+
# Ruby Plain oAuth Login - Example
|
2
2
|
|
3
|
-
A single view
|
3
|
+
A single view that demonstrates the Fidor API OAuth login flow and how to get
|
4
|
+
an access token.
|
4
5
|
|
5
|
-
|
6
|
+
## Usage
|
6
7
|
|
7
8
|
This uses bundler to install the required gems:
|
8
9
|
|
@@ -12,3 +13,12 @@ This uses bundler to install the required gems:
|
|
12
13
|
|
13
14
|
# or run on different port than :4567 provided by WEBrick
|
14
15
|
ruby example.rb -p 3004
|
16
|
+
|
17
|
+
## Configuration
|
18
|
+
|
19
|
+
In case you downloaded this project from the Fidor AppManager, all the
|
20
|
+
configuration should have already been set up for you. In case you
|
21
|
+
retrieved this example from another source, you'll need to open the
|
22
|
+
`example.rb` file and fill in the configuration values at the top of the
|
23
|
+
file. You will be able to find out the values in the AppManager, create
|
24
|
+
a new App and use the configuration from the new App's detail page.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fidor_starter_kits
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Georg Leciejewski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -84,8 +84,11 @@ files:
|
|
84
84
|
- lib/fidor_starter_kits/version.rb
|
85
85
|
- spec/fidor_starter_kits_spec.rb
|
86
86
|
- spec/spec_helper.rb
|
87
|
+
- starter_kits/golang_plain/.fidor_meta.json
|
88
|
+
- starter_kits/golang_plain/README.md
|
87
89
|
- starter_kits/golang_plain/example.go
|
88
90
|
- starter_kits/java_servlet/.classpath
|
91
|
+
- starter_kits/java_servlet/.fidor_meta.json
|
89
92
|
- starter_kits/java_servlet/.project
|
90
93
|
- starter_kits/java_servlet/.settings/.jsdtscope
|
91
94
|
- starter_kits/java_servlet/.settings/org.eclipse.jdt.core.prefs
|
@@ -103,9 +106,12 @@ files:
|
|
103
106
|
- starter_kits/java_servlet/WebContent/WEB-INF/lib/httpmime-4.3.5.jar
|
104
107
|
- starter_kits/java_servlet/WebContent/WEB-INF/lib/json-simple-1.1.1.jar
|
105
108
|
- starter_kits/java_servlet/src/de/fidor/api/example/Example.java
|
109
|
+
- starter_kits/node_tx/.fidor_meta.json
|
106
110
|
- starter_kits/node_tx/example.js
|
111
|
+
- starter_kits/php_plain/.fidor_meta.json
|
107
112
|
- starter_kits/php_plain/README.md
|
108
113
|
- starter_kits/php_plain/example.php
|
114
|
+
- starter_kits/sinatra_plain/.fidor_meta.json
|
109
115
|
- starter_kits/sinatra_plain/Gemfile
|
110
116
|
- starter_kits/sinatra_plain/README.md
|
111
117
|
- starter_kits/sinatra_plain/example.rb
|