ionis 0.0.6

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.
data/README.rdoc ADDED
@@ -0,0 +1,77 @@
1
+ = IONIS
2
+
3
+ * https://github.com/corbeau-web/Ruby-IONIS-Info-Class
4
+
5
+ == DESCRIPTION:
6
+
7
+ IONIS::Authentication is a pure-Ruby implementation of the original PHP IONIS Class. This allow you to implement authentication using IONIS login and PPP password.
8
+ IONIS::Netsoul help you to get information about online students.
9
+
10
+ == FEATURES/PROBLEMS:
11
+
12
+ * Provide password verification
13
+ * Get user informations like Login, UID, GID, City, Avatar URL, State
14
+
15
+ == SYNOPSIS:
16
+
17
+ In a nutshell:
18
+
19
+ require 'ionis'
20
+
21
+ begin
22
+ hIonis = IONIS::Authentication.new 'login_l', 'unix_password'
23
+ puts hIonis.chkPass 'login_l', 'ppp_password'
24
+ puts hIonis.getUser 'meyer_t'
25
+ puts hIonis.getUser 'cassan_c'
26
+ puts hIonis.getUser 'not_exist'
27
+ puts hIonis.getUser nil
28
+ puts hIonis.getUser -1
29
+
30
+ hNetsoul = IONIS::Netsoul.new
31
+ puts hNetsoul.getUser 'meyer_t'
32
+ puts hNetsoul.getUser 'adam_p'
33
+ rescue IONIS::Exception::HostNotFound => e
34
+ puts e.reason
35
+ rescue IONIS::Exception::ConnectionRefused => e
36
+ puts e.reason
37
+ rescue IONIS::Exception::BadAuthentication => e
38
+ puts e.reason
39
+ rescue IONIS::Exception::FileGrabber => e
40
+ puts e.reason
41
+ end
42
+
43
+
44
+ == REQUIREMENTS:
45
+
46
+ * Net::SSH 2
47
+ * Net::SCP 1
48
+ * bcrypt 3
49
+
50
+ == INSTALL:
51
+
52
+ * gem install ionis (might need sudo privileges)
53
+
54
+ == LICENSE:
55
+
56
+ (The MIT License)
57
+
58
+ Copyright (c) 2012 Thibault MEYER <meyer.thibault@hotmail.fr>
59
+
60
+ Permission is hereby granted, free of charge, to any person obtaining
61
+ a copy of this software and associated documentation files (the
62
+ 'Software'), to deal in the Software without restriction, including
63
+ without limitation the rights to use, copy, modify, merge, publish,
64
+ distribute, sublicense, and/or sell copies of the Software, and to
65
+ permit persons to whom the Software is furnished to do so, subject to
66
+ the following conditions:
67
+
68
+ The above copyright notice and this permission notice shall be
69
+ included in all copies or substantial portions of the Software.
70
+
71
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
72
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
73
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
74
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
75
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
76
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
77
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/lib/ionis.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ require 'ionisexceptions'
3
+ require 'ionisauthentication'
4
+ require 'ionisnetsoul'
@@ -0,0 +1,82 @@
1
+ require 'rubygems'
2
+ require 'tmpdir'
3
+ require 'net/ssh'
4
+ require 'net/scp'
5
+ require 'bcrypt'
6
+ require 'ionisexceptions'
7
+
8
+ module IONIS
9
+ class Authentication
10
+ @tmpDir = nil
11
+ @lstStudent = nil
12
+
13
+ def initialize sshUserName, sshUserPass, forceUpdate = false
14
+ @tmpDir = File.join Dir.tmpdir, 'ionis_auth/'
15
+ @lstStudent = Hash.new
16
+ Dir.mkdir @tmpDir if !File.directory? @tmpDir
17
+ if !File.exist? File.join(@tmpDir, 'ppp.blowfish') or forceUpdate == true
18
+ begin
19
+ Net::SCP.start('ssh.epitech.eu', sshUserName, :password => sshUserPass) do |scp|
20
+ scp.download! '/afs/epitech.net/site/etc/ppp.blowfish', @tmpDir
21
+ scp.download! '/afs/epitech.net/site/etc/passwd', @tmpDir
22
+ scp.download! '/afs/epitech.net/site/etc/location', @tmpDir
23
+ end
24
+ rescue SocketError
25
+ raise IONIS::Exception::HostNotFound.new 405, "Can't resolve ssh.epitech.eu"
26
+ rescue Errno::ECONNREFUSED
27
+ raise IONIS::Exception::ConnectionRefused.new 403, "Connection refused to ssh.epitech.eu"
28
+ rescue Net::SSH::AuthenticationFailed
29
+ raise IONIS::Exception::BadAuthentication.new 402, "Bad authentication"
30
+ rescue Net::SCP::Error
31
+ raise IONIS::Exception::FileGrabber.new 404, "Can't copy file from ssh.epitech.eu..."
32
+ end
33
+ end
34
+
35
+ hFile = File.new (File.join @tmpDir, 'ppp.blowfish'), 'r'
36
+ while line = hFile.gets
37
+ line = line.split ' '
38
+ @lstStudent[line[0]] = Hash.new
39
+ if line[0]
40
+ @lstStudent[line[0]][:login]= line[0]
41
+ @lstStudent[line[0]][:password]= line[1]
42
+ @lstStudent[line[0]][:picture]= "http://www.epitech.eu/intra/picture/#{line[0]}.jpg"
43
+ end
44
+ end
45
+ hFile.close
46
+ hFile = File.new (File.join @tmpDir, 'passwd'), 'r'
47
+ while line = hFile.gets
48
+ line = line.split ':'
49
+ if @lstStudent[line[0]]
50
+ @lstStudent[line[0]][:uid] = line[2]
51
+ @lstStudent[line[0]][:gid] = line[3]
52
+ if line[4].length > 0
53
+ line[4] = line[4].split ' '
54
+ line[4][0].capitalize!
55
+ line[4][1].upcase!
56
+ @lstStudent[line[0]][:fullname] = "#{line[4][0]} #{line[4][1]}"
57
+ end
58
+ end
59
+ end
60
+ hFile.close
61
+ hFile = File.new (File.join @tmpDir, 'location'), 'r'
62
+ while line = hFile.gets
63
+ line = line.split ':'
64
+ if @lstStudent[line[0]]
65
+ @lstStudent[line[0]][:city] = line[1].strip
66
+ end
67
+ end
68
+ hFile.close
69
+ end
70
+
71
+ def chkPass userName, userPass
72
+ false if @lstStudent == nil
73
+ return @lstStudent[userName] if BCrypt::Engine.hash_secret(userPass , @lstStudent[userName][:password]) == @lstStudent[userName][:password]
74
+ false
75
+ end
76
+
77
+ def getUser userName
78
+ false if @lstStudent == nil
79
+ return @lstStudent[userName]
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,16 @@
1
+ module IONIS
2
+ module Exception
3
+ class Exception < ::RuntimeError
4
+ attr_reader :code, :reason
5
+
6
+ def initialize(code, reason)
7
+ @code, @reason = code, reason
8
+ super "#{reason} (#{code})"
9
+ end
10
+ end
11
+ class BadAuthentication < Exception; end
12
+ class HostNotFound < Exception; end
13
+ class ConnectionRefused < Exception; end
14
+ class FileGrabber < Exception; end
15
+ end
16
+ end
@@ -0,0 +1,50 @@
1
+ require 'rubygems'
2
+ require 'socket'
3
+ require 'tmpdir'
4
+ require 'ionisexceptions'
5
+
6
+ module IONIS
7
+ class Netsoul
8
+ @tmpDir = nil
9
+ @usrData = nil
10
+
11
+ def initialize
12
+ @tmpDir = File.join Dir.tmpdir, 'ionis_auth/nsUser'
13
+ if !File.exist? @tmpDir or (File.mtime(@tmpDir).to_i + 300) < Time.now.to_i
14
+ begin
15
+ hSock = TCPSocket.open('ns-server.epita.fr', 4242)
16
+ line = hSock.gets
17
+ if /salut (.*)/.match(line)
18
+ hSock.write "list_users\n"
19
+ @usrData = Hash.new
20
+ while line = hSock.gets
21
+ line.strip!
22
+ break if line == 'rep 002 -- cmd end'
23
+ line = line.split ' '
24
+ @usrData[line[1]] = Hash.new
25
+ @usrData[line[1]]['login'] = line[1]
26
+ @usrData[line[1]]['ip'] = line[2]
27
+ line[10] = line[10].split ':'
28
+ @usrData[line[1]]['state'] = line[10][0]
29
+ @usrData[line[1]]['since'] = line[10][1]
30
+ end
31
+ end
32
+ hSock.close
33
+ rescue SocketError
34
+ raise IONIS::Exception::HostNotFound.new 405, "Can't resolve ns-server.epita.fr"
35
+ rescue Errno::ECONNREFUSED
36
+ raise IONIS::Exception::ConnectionRefused.new 403, "Connection refused to ns-server.epita.fr"
37
+ end
38
+ File.open(@tmpDir, "wb") {|f| Marshal.dump(@usrData, f)}
39
+ else
40
+ @usrData = File.open(@tmpDir, "rb") {|f| Marshal.load(f)}
41
+ end
42
+ end
43
+
44
+ def getUser login
45
+ return false if !@usrData
46
+ @usrData[login]
47
+ end
48
+
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ionis
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Thibault MEYER
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: net-ssh
16
+ requirement: &14220780 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.3.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *14220780
25
+ - !ruby/object:Gem::Dependency
26
+ name: net-scp
27
+ requirement: &14220020 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.4
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *14220020
36
+ - !ruby/object:Gem::Dependency
37
+ name: bcrypt-ruby
38
+ requirement: &14218700 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 3.0.1
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *14218700
47
+ description: A Ruby set of Classes to get informations about students in Ionis group
48
+ email: meyer.thibault@hotmail.fr
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - lib/ionis.rb
54
+ - lib/ionisauthentication.rb
55
+ - lib/ionisnetsoul.rb
56
+ - lib/ionisexceptions.rb
57
+ - README.rdoc
58
+ homepage: https://github.com/corbeau-web/Ruby-IONIS-Info-Class
59
+ licenses: []
60
+ post_install_message:
61
+ rdoc_options:
62
+ - --line-numbers
63
+ - --inline-source
64
+ - --title
65
+ - Net-scp
66
+ - --main
67
+ - README.rdoc
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 1.8.17
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: IONIS Epitech/Epita class set
88
+ test_files: []
89
+ has_rdoc: