{"id":24789412,"url":"https://github.com/detunized/truekey-sharp","last_synced_at":"2026-05-07T04:41:11.816Z","repository":{"id":148651750,"uuid":"137348345","full_name":"detunized/truekey-sharp","owner":"detunized","description":"True Key C# API","archived":false,"fork":false,"pushed_at":"2024-01-19T22:03:52.000Z","size":116,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-09T14:09:32.552Z","etag":null,"topics":["api","c-sharp","c-sharp-library","dotnet","password-manager","true-key"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/detunized.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-06-14T11:19:53.000Z","updated_at":"2024-01-19T22:03:55.000Z","dependencies_parsed_at":"2023-05-20T18:45:33.584Z","dependency_job_id":null,"html_url":"https://github.com/detunized/truekey-sharp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/detunized/truekey-sharp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/detunized%2Ftruekey-sharp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/detunized%2Ftruekey-sharp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/detunized%2Ftruekey-sharp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/detunized%2Ftruekey-sharp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/detunized","download_url":"https://codeload.github.com/detunized/truekey-sharp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/detunized%2Ftruekey-sharp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274231129,"owners_count":25245687,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","c-sharp","c-sharp-library","dotnet","password-manager","true-key"],"created_at":"2025-01-29T17:17:29.250Z","updated_at":"2026-05-07T04:41:06.775Z","avatar_url":"https://github.com/detunized.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"True Key C# API\n===============\n\n## No longer supported\n\nThis project is no longer supported. There's a fully supported and regularly \nupdated C# library that implements access to a veriety of password managers, \nincluding True Key. Please check out \n[Password Manager Access](https://github.com/detunized/password-manager-access).\n\n---\n\n**This is unofficial True Key API.**\n\nNotes\n-----\n\nThe library implements a read-only access to the True Key online password vault.\nAs with the other libraries from this family the interface is intentionally very\nsimple. It's just one call to `Vault.Open`. Because of the way things are\nimplemented in TK the login process cannot be made fully non-interactive. In the\ninitial login the second factor authentication step seems to be mandatory. This\nobviously requires some user interaction. `Vault.Open` takes 4 arguments:\nusername, password, UI and secure storage.\n\n**UI**\n\nUI interface describes the process of interaction with the user. Depending on\nthe response from the server and the state the authentication finite state\nmachine is in there could be up to 3 different requests to the user.\n\n`AskToWaitForEmail`: a verification email has been sent and the user must be\ninstructed to check his/her inbox and click the confirm link sent by the server.\nOnce it's done the `Check` answer must be returned by the method. Another valid\nanswer is `Resend` to tell the server to resend the email.\n\n`AskToWaitForOob`: a second factor push message has been sent to the OOB (out of\nbound) device, usually a mobile phone. The user must be instructed to to check\nthe device with the given name and confirm. Once it's done the `Check` answer is\nexpected to continue. Other possible answers are `Resend` to resend the push\nmessage and `Email` to send an email instead.\n\n`AskToChooseOob`: the user must be presented with a list of OOB devices to\nchoose from. The function should return `Device0` + index of the device chosen.\nA push message will be send to this device. Alternatively the function could\nreturn `Email` to send an email instead.\n\n`Example.Program.TextUi` provides a simple implementation example.\n\n**Secure storage**\n\nAn implementation of `ISecureStorage` interface is used to store a couple of\nvalues between sessions. It's important to reuse these client identification\nvalues issued by the server in order to avoid a new device registration every\ntime the login is performed. This also bypasses second factor steps on\nsubsequent logins. Be careful to reuse the stored values or there's a risk that\nthe list of trusted devices on the server will overflow.\n\nSee sample implementation is in `Example.Program.PlainStorage` for reference.\n\n\nPossible improvements\n---------------------\n\nCurrently the name of the client is hardcoded in the library It's \"truekey-\nsharp\". It's possible to make it configurable as it shows up in the list of\ntrusted devices on the user account page. Perhaps it's better to name it after\nthe product application.\n\nIn the current implementation after the login is performed the device is added\nto the trusted list on the server. This could be made configurable, in case the\nuser doesn't want that to happen.\n\nCurrently there's no way to break out of the authentication FSM unless an error\nhappens. It's possible to add another valid answer `Cancel` to stop the process.\n\nLicense\n-------\n\nThe library is released under [the MIT\nlicense](http://www.opensource.org/licenses/mit-license.php).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdetunized%2Ftruekey-sharp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdetunized%2Ftruekey-sharp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdetunized%2Ftruekey-sharp/lists"}