epitech-api 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/epitech-api.gemspec +23 -0
- data/lib/Exceptions/errors.rb +19 -0
- data/lib/api/check_api.rb +26 -0
- data/lib/api/connection.rb +41 -0
- data/lib/api/info_api.rb +26 -0
- data/lib/api/search_api.rb +20 -0
- data/lib/api/version.rb +6 -0
- data/lib/epitech-api.rb +14 -0
- data/lib/utils.rb +42 -0
- data/lib/version.rb +6 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 269374dfa8ca04aafb52fe4365b804e097e59bc6
|
4
|
+
data.tar.gz: cb60f0bdb4938fc17ed74fc59ecaf6fe7f4c0a6e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 24f688fdfc5b8dfd365fa8bd589d38a95adeca13869090e8ade2fb964afc2ef5f368f6fba1d7145eeb527e17a537c9c24f9aa27d65880c41bb81c55b509e3516
|
7
|
+
data.tar.gz: 513d08f5f63e318216db2bf1e25ee76bac6c6bd1eedec8882b69880e0b6f470a1c716bb59c6ff30204fa3e03f3558ede5a78c5629fb32e63877b20675351080b
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 antoin_m
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Epitech::Api
|
2
|
+
|
3
|
+
This gem can be used to call paysdu42.fr's API through Ruby.
|
4
|
+
You can get informations about all Ionis users.
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
gem 'epitech-api'
|
11
|
+
|
12
|
+
And then execute:
|
13
|
+
|
14
|
+
$ bundle
|
15
|
+
|
16
|
+
Or install it yourself as:
|
17
|
+
|
18
|
+
$ gem install epitech-api
|
19
|
+
|
20
|
+
## Usage
|
21
|
+
|
22
|
+
require 'epitech-api'
|
23
|
+
|
24
|
+
c = Epitech::Api::Connection.new('exampl_e', 'z9VH52jb')
|
25
|
+
if c.is_login? 'antoin_m'
|
26
|
+
puts "Hello, I'm #{c.get_name('antoin_m')}"
|
27
|
+
end
|
28
|
+
|
29
|
+
|
data/Rakefile
ADDED
data/epitech-api.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require_relative 'lib/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "epitech-api"
|
8
|
+
spec.version = Epitech::Api::VERSION
|
9
|
+
spec.authors = ["antoin_m"]
|
10
|
+
spec.email = ["michel1.antoine@epitech.eu"]
|
11
|
+
spec.summary = %q{A simple gem to use Ionis' API.}
|
12
|
+
spec.description = %q{This gem can be used to call paysdu42.fr's API through Ruby. You can get informations about all Ionis users.}
|
13
|
+
spec.homepage = "https://github.com/antoin-m/epitech-api"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# API error's namespace
|
2
|
+
module Epitech::Api::Errors
|
3
|
+
|
4
|
+
# Top of the error tree
|
5
|
+
class Epitech::Api::Errors::Base < RuntimeError
|
6
|
+
end
|
7
|
+
|
8
|
+
# Error thrown when a parameter is missing in the request
|
9
|
+
class Epitech::Api::Errors::MissingParameters < Epitech::Api::Errors::Base
|
10
|
+
end
|
11
|
+
|
12
|
+
# Error thrown when the request ask for an unknown action
|
13
|
+
class Epitech::Api::Errors::UnknownAction < Epitech::Api::Errors::Base
|
14
|
+
end
|
15
|
+
|
16
|
+
# Error thrown when using a bad login/password combination
|
17
|
+
class Epitech::Api::Errors::AuthFail < Epitech::Api::Errors::Base
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Epitech::Api::CheckApi
|
2
|
+
# Check for a good login/password combination (those given to Epitech::Api::Connection.new)
|
3
|
+
# @return [Boolean] True (Raise a Epitech::Api::Errors::AuthFail otherwise)
|
4
|
+
def check_auth
|
5
|
+
call_api(action: 'login')
|
6
|
+
true
|
7
|
+
end
|
8
|
+
|
9
|
+
# Test if the parameter is an existing ionis login
|
10
|
+
# @param login [String] The login to test
|
11
|
+
def is_login?(login)
|
12
|
+
json = call_api(action: 'is_login', login: login)
|
13
|
+
return false if json['state'] != 'OK'
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
# Test if the parameters are an existing login / PPP combination
|
18
|
+
# @param login [String] Login to test
|
19
|
+
# @param pwd [String] Password to test
|
20
|
+
# @return [Boolean]
|
21
|
+
def check_password(login, pwd)
|
22
|
+
json = call_api(action: 'check_password', login: login, password: pwd)
|
23
|
+
return false if json['state'] != 'OK'
|
24
|
+
true
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative 'check_api'
|
2
|
+
require_relative 'info_api'
|
3
|
+
require_relative 'search_api'
|
4
|
+
|
5
|
+
# Class provided to maintain a connection to the API
|
6
|
+
class Epitech::Api::Connection
|
7
|
+
include Epitech::Api
|
8
|
+
|
9
|
+
include Epitech::Api::CheckApi
|
10
|
+
include Epitech::Api::InfoApi
|
11
|
+
include Epitech::Api::SearchApi
|
12
|
+
|
13
|
+
# Constructor
|
14
|
+
# @param login [String] Your ionis login
|
15
|
+
# @param pwd [String] Your ionis password
|
16
|
+
# @return [Boolean] True if the connection was successful (Raise a Epitech::Api::Errors::AuthFail otherwise)
|
17
|
+
def initialize(login, pwd)
|
18
|
+
@login = login
|
19
|
+
@pwd = pwd
|
20
|
+
connect!
|
21
|
+
end
|
22
|
+
|
23
|
+
# Overloading of Epitech::Api::call_api, will use instance variables
|
24
|
+
# for auth_login and auth_password
|
25
|
+
def call_api(opts={})
|
26
|
+
opts[:auth_login] ||= @login
|
27
|
+
opts[:auth_password] ||= @pwd
|
28
|
+
super(opts)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Try to connect to the API with the instance variables
|
32
|
+
def connect!
|
33
|
+
@connected = check_auth
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return True if the connection is established, false otherwise
|
37
|
+
def is_connected?
|
38
|
+
@connected
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/lib/api/info_api.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Epitech::Api::InfoApi
|
2
|
+
|
3
|
+
# Get a Ionis login from a UID
|
4
|
+
# @param uid [String, Integer] The UID to look for
|
5
|
+
# @return [String] The corresponding login
|
6
|
+
def get_login_from_uid(uid)
|
7
|
+
call_api(action: 'get_login_from_uid', uid: uid)['login']
|
8
|
+
end
|
9
|
+
|
10
|
+
%w(uid name group school promo city plan phone).each do |request|
|
11
|
+
class_eval %Q(def get_#{request}(login)
|
12
|
+
call_api(action: "get_#{request}", login: login)['#{request}']
|
13
|
+
end)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Get all the infos about a Ionis login
|
17
|
+
# Each information can be retrieved separately through the get_xxx method
|
18
|
+
# example:
|
19
|
+
# connection.get_name('exampl_e')
|
20
|
+
# connection.get_uid('exampl_e')
|
21
|
+
# @param login [String] The login to look for
|
22
|
+
# @return [Hash] The corresponding infos
|
23
|
+
def get_infos(login)
|
24
|
+
call_api(action: 'get_infos', login: login)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Epitech::Api::SearchApi
|
2
|
+
|
3
|
+
# Used to search across the Ionis users
|
4
|
+
# @param query [String] First/Last Name or Login (or a part of it)
|
5
|
+
# of who you are looking for.
|
6
|
+
# @return [Array] An Array of logins
|
7
|
+
def search(query)
|
8
|
+
call_api(action: 'search', query: query)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Used to search logins across the Ionis users through 3 criterias :
|
12
|
+
# * Schoolname
|
13
|
+
# * Promo
|
14
|
+
# * City
|
15
|
+
# @param opts [Hash] A Hash that should contain at least one of the 3 criterias
|
16
|
+
# @return [Array] An Array of logins
|
17
|
+
def get_logins(opts={})
|
18
|
+
call_api(action: 'get_logins', school: opts[:school], promo: opts[:promo], city: opts[:city])
|
19
|
+
end
|
20
|
+
end
|
data/lib/api/version.rb
ADDED
data/lib/epitech-api.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'version'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
# Gem's global namespace
|
6
|
+
module Epitech
|
7
|
+
module Api
|
8
|
+
# JSON API URL
|
9
|
+
BASE_URL = 'http://ws.paysdu42.fr/JSON/?'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
require_relative 'utils'
|
14
|
+
require_relative 'api/connection'
|
data/lib/utils.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative './Exceptions/errors'
|
2
|
+
|
3
|
+
module Epitech::Api
|
4
|
+
|
5
|
+
# Used to call the webservice
|
6
|
+
# @param opts [Hash] Hash used as URL params, formatted by {#hash_to_req}
|
7
|
+
# @return What the Web API is supposed to return
|
8
|
+
def call_api(opts={})
|
9
|
+
tmp = open(URI(URI.escape(BASE_URL + hash_to_req(opts)))).read
|
10
|
+
tmp = tmp.split("\n").drop(1).join("\n") while tmp.start_with?(%Q(SSH connection failed.))
|
11
|
+
json = JSON.parse(tmp)
|
12
|
+
raise get_error_class(json['error']) if json['error'] != 'none'
|
13
|
+
json['result']
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def get_error_class(str)
|
19
|
+
to_class "Epitech::Api::Errors::#{to_camelcase(str)}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_camelcase(str)
|
23
|
+
str.split('_').collect(&:capitalize).join
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_class(str)
|
27
|
+
Object.const_get str
|
28
|
+
end
|
29
|
+
|
30
|
+
# Transform a Hash to Web API URL params
|
31
|
+
# @param hash [Hash]
|
32
|
+
# @return [String] formatted from 'hash' as follow:
|
33
|
+
# { action: 'connect', login: 'exampl_e' } becomes
|
34
|
+
# "action=connect&login=exampl_e"
|
35
|
+
def hash_to_req(hash)
|
36
|
+
req = ''
|
37
|
+
hash.each_pair do |key, val|
|
38
|
+
req << key.to_s << '=' << val.to_s << '&' unless val.nil?
|
39
|
+
end
|
40
|
+
req.chop
|
41
|
+
end
|
42
|
+
end
|
data/lib/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: epitech-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- antoin_m
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: This gem can be used to call paysdu42.fr's API through Ruby. You can
|
42
|
+
get informations about all Ionis users.
|
43
|
+
email:
|
44
|
+
- michel1.antoine@epitech.eu
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- .gitignore
|
50
|
+
- Gemfile
|
51
|
+
- LICENSE.txt
|
52
|
+
- README.md
|
53
|
+
- Rakefile
|
54
|
+
- epitech-api.gemspec
|
55
|
+
- lib/Exceptions/errors.rb
|
56
|
+
- lib/api/check_api.rb
|
57
|
+
- lib/api/connection.rb
|
58
|
+
- lib/api/info_api.rb
|
59
|
+
- lib/api/search_api.rb
|
60
|
+
- lib/api/version.rb
|
61
|
+
- lib/epitech-api.rb
|
62
|
+
- lib/utils.rb
|
63
|
+
- lib/version.rb
|
64
|
+
homepage: https://github.com/antoin-m/epitech-api
|
65
|
+
licenses:
|
66
|
+
- MIT
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.0.14
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: A simple gem to use Ionis' API.
|
88
|
+
test_files: []
|
89
|
+
has_rdoc:
|