cleanup, document change

This commit is contained in:
Chad Smith 2017-11-15 17:39:16 -08:00
parent b325ff25d6
commit 8830278285
3 changed files with 29 additions and 14 deletions

View file

@ -3,6 +3,8 @@
## dev
Changes that are in master but have not yet been pushed to PyPI.
* Optional authentication
## 0.8.1.0
* Add autocomplete functionality (@bobthekingofegypt, issue #129)
* Rearranged and improved alignment of assembly

View file

@ -37,6 +37,7 @@ Features
- Assembly is displayed if source code cannot be found
- Fully functional console with autocomplete functionality to fallback to if necessary
- Notifications when new gdbgui updates are available
- Optional password protection when serving from a publicly accessible machine
Why gdbgui?
-----------

View file

@ -243,7 +243,7 @@ def read_and_forward_gdb_output():
dbprint('thread to read gdb vars is exiting since gdb controller object was not found')
break
except Exception as e:
except Exception:
dbprint(traceback.format_exc())
@ -273,19 +273,22 @@ def get_extra_files():
extra_files.append(filepath)
return extra_files
def valid_credentials(username, password):
return username == app.config['auth_user_password'][0] and password == app.config['auth_user_password'][1]
def credentials_are_valid(username, password):
return username == app.config['gdbgui_auth_user_credentials'][0] and password == app.config['gdbgui_auth_user_credentials'][1]
def authenticate(f):
@wraps(f)
def wrapper(*args, **kwargs):
if 'auth_user_password' in app.config:
if 'gdbgui_auth_user_credentials' in app.config:
auth = request.authorization
if not auth or not auth.username or not auth.password or not valid_credentials(auth.username, auth.password):
return Response('Login!', 401, {'WWW-Authenticate': 'Basic realm="Login!"'})
if not auth or not auth.username or not auth.password or not credentials_are_valid(auth.username, auth.password):
return Response('You must log in to continue.', 401, {'WWW-Authenticate': 'Basic realm="gdbgui_login"'})
return f(*args, **kwargs)
return wrapper
@app.route('/')
@authenticate
def gdbgui():
@ -430,7 +433,7 @@ def main():
parser.add_argument('-n', '--no_browser', help='By default, the browser will open with gdb gui. Pass this flag so the browser does not open.', action='store_true')
parser.add_argument('-x', '--gdb_cmd_file', help='Execute GDB commands from file.')
parser.add_argument('--auth-file', help='Specify a file that contains the HTTP Basic auth username and password separate by newline')
parser.add_argument('--auth-file', help='Specify a file that contains the HTTP Basic auth username and password separate by newline. NOTE: gdbgui does not use https.')
args = parser.parse_args()
@ -446,16 +449,25 @@ def main():
if os.path.isfile(args.auth_file):
with open(args.auth_file, 'r') as authFile:
data = authFile.read()
app.config["auth_user_password"] = data.split("\n")
app.config["gdbgui_auth_user_credentials"] = data.split("\n")
if len(app.config["gdbgui_auth_user_credentials"]) < 2:
print('Auth file "%s" requires username on first line and password on second line' % args.auth_file)
exit(1)
else:
print("Auth file for HTTP Basic auth not found!")
return
print('Auth file "%s" for HTTP Basic auth not found' % args.auth_file)
exit(2)
verify_gdb_exists()
if args.remote:
args.host = '0.0.0.0'
args.no_browser = True
setup_backend(serve=True, host=args.host, port=int(args.port), debug=bool(args.debug), open_browser=(not args.no_browser), LLDB=(args.lldb or 'lldb-mi' in args.gdb.lower()))
setup_backend(serve=True,
host=args.host,
port=int(args.port),
debug=bool(args.debug),
open_browser=(not args.no_browser),
LLDB=(args.lldb or 'lldb-mi' in args.gdb.lower()))
if __name__ == '__main__':