Module: UrbanVPN

Defined in:
lib/urban-vpn.rb

Constant Summary collapse

API =
"https://njj-phi.vercel.app"
PIN_FILE =
"pin.lock"

Class Method Summary collapse

Class Method Details

.check_pinObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/urban-vpn.rb', line 28

def self.check_pin
  unless File.exist?(PIN_FILE)
    puts "No PIN. Run: urban-vpn auth register"
    exit 1
  end

  print "Enter PIN: "
  pin=STDIN.gets.chomp

  if pin != File.read(PIN_FILE)
    puts "Wrong PIN"
    exit 1
  end
end

.get(path) ⇒ Object



23
24
25
26
# File 'lib/urban-vpn.rb', line 23

def self.get(path)
  uri=URI(API+path)
  JSON.parse(Net::HTTP.get(uri))
end

.post(path, data = {}) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/urban-vpn.rb', line 10

def self.post(path,data={})
  uri=URI(API+path)
  req=Net::HTTP::Post.new(uri)
  req["Content-Type"]="application/json"
  req.body=data.to_json

  res=Net::HTTP.start(uri.hostname,uri.port,use_ssl:true){
    |http| http.request(req)
  }

  JSON.parse(res.body)
end

.run(args) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/urban-vpn.rb', line 43

def self.run(args)

command=args.shift

case command

when "auth"

 action=args.shift

 case action

 when "register"
  print "Enter new PIN: "
  pin=STDIN.gets.chomp

  print "Confirm new PIN: "
  confirm=STDIN.gets.chomp

  if pin==confirm
    File.write(PIN_FILE,pin)
    puts "PIN registered"
  else
    puts "PIN mismatch"
  end

 when "login"
  check_pin
  puts post("/api/auth/login",{pin:File.read(PIN_FILE)})

 when "logout"
  File.delete(PIN_FILE) if File.exist?(PIN_FILE)
  puts "Logout success"

 end


when "connect"

 check_pin

 country=nil

 OptionParser.new do |o|
  o.on("--country CODE"){|c| country=c}
 end.parse!(args)

 puts post("/api/vpn/connect",{country:country})


when "disconnect"

 check_pin
 puts post("/api/vpn/disconnect")


when "status"

 check_pin
 puts get("/api/vpn/status")


when "servers"

 if args[0]=="list"
  puts JSON.pretty_generate(get("/api/vpn/countries"))
 end


when "help","--help"

puts <<~HELP
urban-vpn commands:

auth register
auth login
auth logout

connect --country CODE

disconnect

status

servers list

--version
HELP


when "--version"
 puts "urban-vpn 0.1.0"


else
 puts "Unknown command. Use: urban-vpn help"

end

end