Git Product home page Git Product logo

gamechatlite's Introduction

watfordjc

I am John Cook (WatfordJC) and I go through phases of dabbling with turning fleeting thoughts into code, invariably only half finishing the code before losing interest or thinking about something else.

ICD-10 F84.5, F33.1, F32.2

Part of the reason I leave code half finished is because of how my brain works. A lot of people on the autism spectrum have specific interests, but my combination of recurrent depressive disorder and treatment-resistant major depressive disorder mean losing interest in things is my psychological norm.

As a result, I have a wide range of interests, a specific interest for a period of time, and zero interests, depending on mood, meltdowns, anhedonic levels, etc. I am a domain registrar, a record label, a food grower, and the politics section of my Web site still contains my 2010 election manifesto (a week or so before the deadline for submitting nomination papers I was advised not to stand).

I wrote a list of things that didn't interest me one of the recent times I suffered anhedonia, not that I finished the list… maths, accounting, business, politics, sociology, health & fitness, first aid, psychiatry, electronics, radio communications, telecommunications, music production, Internet/Web/e-mail standards/services, video production, cosmology, computers, technology, programming.

Projects and Applications

My Web browser acts a bit like a stack, although with more things being added to it than removed I recently tripled my RAM to avoid a figurative stack overflow. I have about 100 browser windows open and the total number of tabs is likely in the region of 500-2,000.

I do eventually close tabs when I've finished needing the documentation for coding something (or when background workers in Web pages are using too much CPU), though.

The tabs for the Have I Been Pwned? API were closed when I "completed" my Android app Bad Passwd, although I think the Food Standards Agency API tabs I had open when last working on the Android app Food Safety Alerts were open on my now dead laptop so haven't been closed (yet). I prefer Java over Kotlin.

Repositories

In the language of C, there is my half-finished EPP client (it needs recompiling for every command), my FCM XMPP Connection Server implementation, a half-finished gammu MySQL PDU converter that doesn't connect to MySQL, an LTO encryption tool using SPTI, and my OBS plugin obs-shm-image-source which adds a shared memory image source type to OBS (i.e. displays a Direct3D ID3D11Texture2D stored in the GPU by another program).

In PHP, there is my unmaintained sms_inject repo that used to be able to send SMS messages using gammu with MySQL storage.

I tend to use bash/dash scripts when cobbling things together, such as le-revoke-check-2020 which checked for certificates affected by the Let's Encrypt mass revocation, and my patches to tweet.sh to allow downloading Twitter profile images from a Twitter list of users (rather than writing something that uses the API from scratch). I have many more bash/dash scripts, but they tend to have a specific purpose that wouldn't make sense to post online other than for backup purposes.

I don't really use python, although I have some patches for tplink-smartplug, one of which is based on a gist someone wrote for the new protocol.

C# is my Windows programming language (using C and C++ when I need to such as dabbling with DirectX), although I have used WScript, COM, and bash.exe to call a bash script in WSL2 to avoid writing Windows code. csharp-stream-controller needs fixing and uses WPF and .NET Core, LTO-Encryption-Manager needs finishing, and EditableCMD/EditableCMDSanitised is a console application in .NET 5.0 that may someday be an extensible wrapper around command prompt.

Projects

I have used GitHub repository projects in the past, but by the point I need a GitHub project to organise issues I have likely already got more than one repository the issues relate to. Rather than duplicate the issues in different repositories, they are added to the watfordjc user project that repository is linked to.

My GitHub projects usually get created when issues need prioritising, which typically occurs when the codebase has gotten to the point of needing refactoring and cleaning up.

My Live Streaming Control project covers repositories about live streaming, such as my currently broken OBS stream controller.

My Data Backups and Archiving project is for backing up and archiving data. As well as a Wiki containing thoughts on how I'd achieve that, it includes repositories for LTO tape storage and encryption.

My EditableCMD project is for my command prompt wrapper with editable output and plugin support.

Code Signing

My GitHub commits are normally signed using GPG key 0xBF09A195A052493F80975092380852F8F6CE9235, although there are some instances where I use the GitHub Web interface resulting in GitHub's GPG key 0x5DE3E0509C47EA3CF04A42D34AEE18F83AFDEB23 being used instead.

I do use other GPG keys for commit-signing and code-signing, but these are unlikely to be used on GitHub. Most of my GPG keys are signed by my master signing key, 0xAE04BA84CDC96DD4F2B3D1EB4EEB0C689DE6BB74.

My Debian packages and commits, including those that are Ubuntu-compatible, are signed using GPG key 0xB67D120BDA498C2C66959B031CBF612DBBE5DE6F.

My Ubuntu packages and commits are signed with key 0xA9AE7BD699B94178F4B89F8C8C5E2CC1D6498FBA. My Ubuntu PPAs are signed by Launchpad using key 0x0C7F9AD49DD1D9D38D4387DF9C80A534D162C034.

Commits and packages relating to my infrastructure may be signed by my GPG key for hostmaster (DNS) purposes, 0x9677EA855262A4ECA14D9B21990D7896239C495E.

My Windows builds are signed using my own certificate authority infrastructure.

The root certificate authority is John Cook UK Root CA (.crt), the current intermediate used is John Cook UK Code Signing CA, and my current code-signing certificate is John Cook.

My Android APKs are currently signed using app signing keys that I control. This may change if I start using Play App Signing for an app, such as if I want to use app bundles.

gamechatlite's People

Contributors

watfordjc avatar

Watchers

 avatar  avatar

gamechatlite's Issues

Crete user identification system

Feature Branch

Current feature branch for this issue: not created yet.

Progress

  • Decide how to create a user identification system and update this task list.
  • Determine how to acquire explicit opt-in of storing identifiers, cookies, etc. through the application's UI.
    • Explain what is going to happen. For example, the Login with Discord button could display an interstitial dialog/modal (UI decisions) that has expandable sections of progress.
      • The first section heading could have a heading Logging in to Game Chat Lite with Google Firebase Anonymous Authentication and display the program logic in a human-readable way, what data will be sent/created, what will be done with the data, what data will be stored and where (and with what service providers if applicable), etc.
        • Depending on the level of verbosity of the progress steps, it might be interesting to display hyperlinks to the actual lines of source code on GitHub for the functions being called.
      • Ask for permission to use Windows notifications (not sure if available to WPF applications) to notify that the application's login flow is ready for the next user interaction, such as "Discord Web page loaded. Authenticate with Discord to grant/deny account usage permissions."
    • Create some form of versioned explicit opt-in/opt-out state store for storing "user has (not) agreed" with the version of the opt-in/opt-out agreed to, and a store for the latest versions of each opt-in/opt-out.
      • There might be some way of signing in with a "federated identity provider" on a new device to import opt-ins/opt-outs from a user's "default settings" or another device before starting the account creation/login process. Dependent on how I decide to link accounts.
      • Changes to versions of opt-ins/opt-outs that might need agreeing to could be made available in the UI of application, such as an "Access and Permissions" page. There could be some form of icon that indicates if there might be an issue using the APIs if the app is in the background, allowing a user to pre-emptively agree to the changes rather than be interrupted in a call (e.g. if the access token is expiring soon).
      • Upload of the opt-ins/opt-outs with "the cloud" and some form of versioning/date-stamping combined with diffs of all the opt-ins/opt-outs and agreements (such as privacy policy) would allow a user to see everything they have agreed to over time.
      • The agreements (such as the ToS and Privacy Policy URLs that need I still need to fill in for Discord) could be broken down into chunks, making the agreements negotiable (non-negotiable agreements can carry less weight). Some terms might be mandatory, some might have time-based change dates (e.g. changes requiring a notice period), and some might only apply if a user uses certain features.
        • A heading could have a Game Chat Lite data usage/permission opt-in, that if previously agreed to could be automatically checked. "Mandatory Opt-In: Section X.Y of the Game Chat Lite Privacy Policy (csrfToken cookie). Click to expand... Game Chat Lite's server will store a csrfToken cookie on your device when Game Chat Lite Web pages that can post data to the server are requested. The cookie's value changes on every request to such a page. When posting data to the server, the value of the cookie will be included in the data (and automatically in the Cookie: request header), so the server can compare the value in the header with that in the data to verify the browser tab/window sending the data is not impersonating the Web site. This cookie will not be used to track how you navigate the Web site, although it may be used to check which page has been used to post the data."
    • Create a way to obtain all data stored about a user, and who is storing it.
      • This will probably involve the use of Firebase Realtime Database.
      • The existence of data being stored can likely be interpreted based on whether or not a node exists.
      • Displaying the value of such nodes, such as the value of an email address node, should require further authentication.
    • Create a way for a user to correct data, delete data, and delete account.

Background

Whilst working on #1, I realised that having a simple proxy relay things between the application and Discord is undesirable as it could allow flooding of Discord's servers with the only possible option at Discord's end to block my server's IP address and/or my app's API key.

I removed logins from my Web sites so long ago I'd have to check my Web site's archive section... site redesign and content consolidation started on 24th February 2014 (new site doesn't have logins). Consolidation of domain names started on 29th December 2014. Site migration (301 Moved Permanently, 410 Gone) was completed by 20th October 2015, with most of the NGINX rewrite configuration lines created on 13th January 2015. The switch to the old site only serving redirects and errors occurred at some point between January and October 2015, which means I haven't had a Web site with a login system for 6 years.

It isn't like I don't have anything using authentication nowadays. One of my internal Android apps uses TLS client certificates for authentication, as do my enterprise Wi-Fi SSIDs. Another internal Android app uses Firebase Cloud Messaging to receive notifications which I think uses Firebase Auth anonymous accounts, as does one of my published Android apps.

This issue is for the entire question of how the application is going to deal with authentication, identification, and the linking of identifiers.

Add Log In With Discord

Feature Branch

Current feature branch for this issue: not created yet.

Progress

  • Create basic OAuth2 workflow handling.
  • Register app with Discord.
  • Successfully login to Discord.
    • Store token and refresh token appropriately.
    • Use refresh token to keep token renewed.

Background

The other day in a Discord call I asked what the audio was like and was told I didn't sound like I usually do. Whilst changing settings to try and improve the audio quality, I noticed that Discord was using 25-60% of my CPU (4 core/thread Intel J4105, Odyssey X86 SBC).

That raised a question: could I create an app for Discord calls that uses less system resources, particularly less CPU?

There are several things needed to connect to a Discord call that are covered in a comment to this issue.

This issue is related to the first thing required: obtaining an OAuth2 access token for our Discord user.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.