easy-mysql 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/easy-mysql +6 -0
  2. data/lib/easy-mysql.rb +135 -0
  3. metadata +79 -0
data/bin/easy-mysql ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ raise 'easy-mysql must be run as root. Try `rvmsudo easy-mysql`.' unless Process.uid == 0
4
+
5
+ require 'easy-mysql'
6
+ EasyMysql.driver
data/lib/easy-mysql.rb ADDED
@@ -0,0 +1,135 @@
1
+ require 'mysql'
2
+ require 'rainbow'
3
+
4
+ class EasyMysql
5
+ def self.driver
6
+ puts " easy-mysql, created by Connor McArthur "
7
+
8
+ begin
9
+ new_mysql_user_info = self.getInputAndMakeMySQLUser
10
+ new_linux_user_info = self.getInputAndMakeLinuxUser
11
+ rescue
12
+ return false
13
+ end
14
+
15
+ puts "\r\nMySQL".background(:yellow).bright
16
+ puts "Username: {#new_mysql_user_info.username}"
17
+ puts "Password: {#new_mysql_user_info.password}"
18
+
19
+ puts "\r\nLinux User".background(:yellow).bright
20
+ puts "Username: {#new_linux_user_info.username}"
21
+ puts "Password: {#new_linux_user_info.password}"
22
+
23
+ puts "\r\nSUCCESS!".background(:red).bright
24
+ end
25
+
26
+ def self.getInputAndMakeLinuxUser
27
+ puts "\n\rEnter a username for the new Linux user: "
28
+
29
+ print "Username: ".bright
30
+ linux_username = gets.chomp
31
+
32
+ puts "\n\rPaste in the public key for the new Linux user: "
33
+
34
+ print "Public Key Text: ".bright
35
+ linux_pubkey = gets.chomp
36
+
37
+ new_linux_user_info = self.addLinuxUser(linux_username)
38
+ self.setUpLinuxUserFilesystem(linux_username, linux_pubkey)
39
+ end
40
+
41
+ def self.addLinuxUser(username)
42
+ group = username
43
+ password = self.makeRandomPassword
44
+
45
+ output = `useradd -p #{password.crypt("JU")} -g #{group} #{username}`
46
+
47
+ unless $?.to_i == 0
48
+ raise $?
49
+ end
50
+
51
+ return { username: username, password: password }
52
+ end
53
+
54
+ def self.setUpLinuxUserFilesystem(username, pubkeytext)
55
+ begin
56
+ Dir.mkdir("/home/#{username}") unless File.exists?("/home/#{username}")
57
+ Dir.mkdir("/home/#{username}/.ssh") unless File.exists?("/home/#{username}/.ssh")
58
+
59
+ File.open("/home/#{username}/.ssh/authorized_keys", 'w') do |file|
60
+ file.write pubkeytext
61
+ end
62
+
63
+ `chown -R #{username}:#{username} /home/#{username}`
64
+ `chmod -R 0600 /home/#{username}/.ssh`
65
+ rescue => e
66
+ puts "\r\nERROR! #{e.message}".background(:red).bright
67
+ raise e
68
+ end
69
+ end
70
+
71
+ def self.getInputAndMakeMySQLUser
72
+ puts "\n\rEnter your MySQL admin login credentials: "
73
+
74
+ print "Username: ".bright
75
+ mysql_admin_username = gets.chomp
76
+ print "Password: ".bright
77
+ mysql_admin_password = gets.chomp
78
+
79
+ begin
80
+ connection = self.makeMySQLConnection(mysql_admin_username, mysql_admin_password)
81
+ rescue => e
82
+ puts "\r\nERROR! #{e.message}".background(:red).bright
83
+ raise e
84
+ end
85
+
86
+ puts "\n\rEnter a username for the new MySQL user: "
87
+
88
+ print "Username: ".bright
89
+ mysql_new_username = gets.chomp
90
+
91
+ begin
92
+ new_user = self.addMySQLUser(connection, mysql_new_username)
93
+ rescue => e
94
+ puts "\r\nERROR! #{e.message}".background(:red).bright
95
+ raise e
96
+ end
97
+
98
+ return new_user
99
+ end
100
+
101
+ def self.makeMySQLConnection(username, password)
102
+ Mysql::new('127.0.0.1', username, password)
103
+ end
104
+
105
+ def self.addMySQLUser(connection, new_username)
106
+ puts "Creating a new MySQL user..."
107
+
108
+ new_password = self.makeRandomPassword
109
+
110
+ query = "GRANT SELECT ON *.* TO `#{new_username}`@`127.0.0.1` IDENTIFIED BY '#{new_password}'";
111
+
112
+ connection.query(query)
113
+
114
+ return { username: new_username, password: new_password }
115
+ end
116
+
117
+ def self.makeRandomPassword(len = 24)
118
+ (0...len).map{self.makeRandomCharacter}.join
119
+ end
120
+
121
+ def self.makeRandomCharacter
122
+ type = rand(3)
123
+
124
+ if type == 0
125
+ # uppercase letters
126
+ return (65+rand(26)).chr
127
+ elsif type == 1
128
+ # lowercase letters
129
+ return (97+rand(26)).chr
130
+ else
131
+ # numbers
132
+ return rand(9)
133
+ end
134
+ end
135
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: easy-mysql
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Connor McArthur
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mysql
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.9.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.9.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: rainbow
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.1.4
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.4
46
+ description: A simple way to set up a secure MySQL connection.
47
+ email: connormcarthur11@gmail.com
48
+ executables:
49
+ - easy-mysql
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - lib/easy-mysql.rb
54
+ - bin/easy-mysql
55
+ homepage: http://rubygems.org/gems/easy-mysql
56
+ licenses: []
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 1.8.24
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: easy-mysql
79
+ test_files: []