easy-mysql 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.
- data/bin/easy-mysql +6 -0
- data/lib/easy-mysql.rb +135 -0
- metadata +79 -0
data/bin/easy-mysql
ADDED
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: []
|