Skip to content

Connecting-type app for people to match professionally and discuss/implement business ideas. The server is built using Go, and the clients are built in Swift (iOS and watchOS).

License

Notifications You must be signed in to change notification settings

RazvanBerbece/bisMate

Repository files navigation

bisMate

Connecting-type app for people to match profesionally and discuss/implement business ideas.

Progress

  • Go Server & iOS Client (prototype)
  • Basic User Account Operations
  • Messaging -- Functional on simulator (doesn't currently work on physical devices)
  • Location Uploader
  • 'Connect' functionality
  • User Profile Info Enhancement (Pic, Bio, Work Place, Position etc.)
  • Connection Popup Styling and Populating (Pic, Bio, Work Place, Position etc.)
  • Location Remover on Location Change
  • Go Server Secured -- HTTP for now (TLS implemented but there are some config issues)
  • Encrypt Data sent to Firebase (ie. Messages) -- Client-side encryption, uses a 512-bit RSA key pair.

Further Dev Cycles

  • watchOS Client

Server (REST & Web Sockets)

Server is built using Golang (or Go, for short).

API Responses

Response {
    "TransactionID" : int,
    "Result" : int,
    "Data" : Any (will be primitive data types or encodable structs),
    "Message" : string,
}

Example of response for GetUser(UID):

{
  "Data" : {
    "DisplayName" : "New Name",
    "UID" : "jaq3RAOFuBar41BySERkP0WPugZ2",
    "PhotoURL" : "",
    "Email" : "[email protected]",
    "EmailVerified" : false,
    "PhoneNumber" : ""
},
  "Result" : 1,
  "Message" : "User retrieved successfully.",
  "TransactionID" : 0
}

API Endpoints

  1. /ws -- Web Socket entry point for device (mainly used for messaging use case)
  2. /conn -- Tests Go server
  3. /operation?token=&operation=&input= -- Uses the token param to verify a transaction (gets User ID from token verification) and then processes the operation specified in the operation parameter using the data in the input field

Operations ( = Description (Params))

User Profile Data

  • 0 = Get User Profile (UID : String)
  • ubg = Get Bio (UID : String)
  • ubs = Set Bio (Bio : String)
  • 2 = Change Display Name (DisplayName : String)
  • pps = Set Profile Picture (Multiform Data : Base64String)
  • ppg = Get Profile Picture (UID : String)

User Account High Security Operations

  • d = Delete Account
  • c = Change Password (Pass : String)

Location Handling

  • ws = UID Location (City) (PUSH) (UID : String, City : String)
  • wg = UID Location (City) (GET ALL) (UID : String, City : String)

Connections component

  • xs = LikedBy (PUSH) (UID : String, LikedUID: String)
  • xg = LikedBy (GET) (UID : String, LikedUID: String)
  • xx = Likes (GET) (UID : String)
  • xxy = Matches (GET) (UID : String)

Messaging Component

  • y = Get chat history of user (list of chats with users)
  • z = Get detailed chat history between two users on Firebase database for future retrieval (Remote_UID : String)

Go Frameworks

  • Gorilla Websocket
  • Firebase
  • Firebase Auth
  • Option Package
  • The rest are Go standard packages

Client (iOS)

The Client is built in Swift (UIKit).

Cocoapods

  • SwiftyJSON
  • Firebase (+ Auth)
  • Starscream
  • Alamofire
  • SwiftyRSA

Testing

Testing has been implemented for the Go side of the project and a GitHub Action was created to run them on every push & merge to main. The action will always fail online because the conf.json file which contains the Firebase API credentials & config is not pushed. Testing for Swift-side to be implemented in the near future.

  • [ ] Backend Testing (Firebase, Sockets, other units) -- in progress
  • [ ] Frontend Testing (UI, Requests, other units)

There is a possibility in the future that there will be a lightweight version of the iOS Client developed for the watchOS.

About

Connecting-type app for people to match professionally and discuss/implement business ideas. The server is built using Go, and the clients are built in Swift (iOS and watchOS).

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published