| # Copyright (C) 2021 Apple Inc. All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions |
| # are met: |
| # 1. Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # 2. Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # |
| # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND |
| # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR |
| # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| import cgi |
| import os |
| from urllib.parse import parse_qs |
| |
| query = parse_qs(os.environ.get('QUERY_STRING', ''), keep_blank_values=True) |
| post_data = {} |
| |
| |
| def get_cookies(): |
| cookies = {} |
| if 'HTTP_COOKIE' in os.environ: |
| header_cookies = os.environ['HTTP_COOKIE'] |
| header_cookies = header_cookies.split('; ') |
| |
| for cookie in header_cookies: |
| cookie = cookie.split('=') |
| cookies[cookie[0]] = cookie[1] |
| |
| return cookies |
| |
| |
| def get_post_data(): |
| request_method = os.environ.get('REQUEST_METHOD', '') |
| if request_method == 'POST': |
| form = cgi.FieldStorage() |
| for key in form.keys(): |
| if key not in query.keys(): |
| post_data.update({key: form.getvalue(key)}) |
| |
| return post_data |
| |
| |
| def get_request(): |
| request = {} |
| for key in query.keys(): |
| request.update({key: query[key][0]}) |
| |
| # request.update(get_post_data()) |
| request.update(get_cookies()) |
| return request |
| |
| |
| def get_count(file): |
| if not os.path.isfile(file): |
| with open(file, 'w') as open_file: |
| open_file.write('0') |
| return '0' |
| |
| with open(file, 'r') as open_file: |
| return open_file.read() |
| |
| |
| def get_state(file, default='Uninitialized'): |
| if not os.path.isfile(file): |
| return default |
| with open(file, 'r') as file: |
| return file.read() |
| |
| |
| def set_state(file, state): |
| with open(file, 'w') as open_file: |
| open_file.write(state) |
| return state |
| |
| |
| def step_state(file): |
| state = get_count(file) |
| with open(file, 'w') as open_file: |
| open_file.write(f'{int(state) + 1}') |
| return state |