static int DeleteOtherKeys(int type) { CString match; if (type == SimpleCredentialType::LocalWincred) match = _T("L\ncredential.helper\nwincred"); else if (type == SimpleCredentialType::LocalWinstore) match = _T("L\ncredential.helper\n") + GetWinstorePath(); else if (type == SimpleCredentialType::GlobalWincred) match = _T("G\ncredential.helper\nwincred"); else if (type == SimpleCredentialType::GlobalWinstore) match = _T("G\ncredential.helper\n") + GetWinstorePath(); else if (type == SimpleCredentialType::SystemWincred) match = _T("S\ncredential.helper\nwincred"); CAutoConfig config(true); git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitLocalConfig()), GIT_CONFIG_LEVEL_LOCAL, FALSE); git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitGlobalConfig()), GIT_CONFIG_LEVEL_GLOBAL, FALSE); git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitGlobalXDGConfig()), GIT_CONFIG_LEVEL_XDG, FALSE); git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitSystemConfig()), GIT_CONFIG_LEVEL_SYSTEM, FALSE); STRING_VECTOR list; git_config_foreach_match(config, "credential\\..*", GetCredentialAnyEntryCallback, &list); for (size_t i = 0; i < list.size(); ++i) { int pos = 0; CString prefix = list[i].Tokenize(_T("\n"), pos); if (prefix == _T("S") && !CAppUtils::IsAdminLogin()) { RunUAC(); return -1; } } int result = 0; // workaround gitdll bug // TODO: switch to libgit2 bool old = g_Git.m_IsUseGitDLL; g_Git.m_IsUseGitDLL = false; for (size_t i = 0; i < list.size(); ++i) { if (list[i] != match) { int pos = 0; CString prefix = list[i].Tokenize(_T("\n"), pos); CString key = list[i].Tokenize(_T("\n"), pos); CONFIG_TYPE configLevel = prefix == _T("S") ? CONFIG_SYSTEM : prefix == _T("G") || prefix == _T("X") ? CONFIG_GLOBAL : CONFIG_LOCAL; if (g_Git.UnsetConfigValue(key, configLevel)) { CString msg; msg.Format(IDS_PROC_SAVECONFIGFAILED, key, _T("")); CMessageBox::Show(NULL, msg, _T("TortoiseGit"), MB_OK | MB_ICONERROR); result = 1; break; } } } g_Git.m_IsUseGitDLL = old; return result; }
bool SaveSimpleCredential(int type) { CONFIG_TYPE configLevel; CString value; if (type == SimpleCredentialType::LocalWincred) { configLevel = CONFIG_LOCAL; value = _T("wincred"); } else if (type == SimpleCredentialType::LocalWinstore) { configLevel = CONFIG_LOCAL; value = GetWinstorePath(); } else if (type == SimpleCredentialType::GlobalWincred) { configLevel = CONFIG_GLOBAL; value = _T("wincred"); } else if (type == SimpleCredentialType::GlobalWinstore) { configLevel = CONFIG_GLOBAL; value = GetWinstorePath(); } else if (type == SimpleCredentialType::SystemWincred) { configLevel = CONFIG_SYSTEM; value = _T("wincred"); } else { return true; } // workaround gitdll bug // TODO: switch to libgit2 bool old = g_Git.m_IsUseGitDLL; g_Git.m_IsUseGitDLL = false; if (g_Git.SetConfigValue(_T("credential.helper"), value, configLevel, CP_UTF8)) { CString msg; msg.Format(IDS_PROC_SAVECONFIGFAILED, _T("credential.helper"), value); CMessageBox::Show(NULL, msg, _T("TortoiseGit"), MB_OK | MB_ICONERROR); return false; } g_Git.m_IsUseGitDLL = old; return true; }
BOOL CSettingGitCredential::OnInitDialog() { ISettingsPropPage::OnInitDialog(); CString proj; bool hasLocal = g_GitAdminDir.HasAdminDir(m_cmdPath, &proj); if (hasLocal) { CString title; this->GetWindowText(title); this->SetWindowText(title + _T(" - ") + proj); } m_ctrlUrlList.ResetContent(); ConfigType::Init(); AddConfigType(ConfigType::Local, CString(MAKEINTRESOURCE(IDS_SETTINGS_LOCAL)), hasLocal); AddConfigType(ConfigType::Global, CString(MAKEINTRESOURCE(IDS_SETTINGS_GLOBAL))); AddConfigType(ConfigType::System, CString(MAKEINTRESOURCE(IDS_SETTINGS_SYSTEM))); m_ctrlConfigType.SetCurSel(0); if (WincredExists()) ((CComboBox*) GetDlgItem(IDC_COMBO_HELPER))->AddString(_T("wincred")); if (WinstoreExists()) ((CComboBox*) GetDlgItem(IDC_COMBO_HELPER))->AddString(GetWinstorePath()); SimpleCredentialType::Init(); AddSimpleCredential(SimpleCredentialType::Advanced, CString(MAKEINTRESOURCE(IDS_ADVANCED))); AddSimpleCredential(SimpleCredentialType::None, CString(MAKEINTRESOURCE(IDS_NONE))); AddSimpleCredential(SimpleCredentialType::LocalWincred, CString(MAKEINTRESOURCE(IDS_LOCAL_WINCRED)), hasLocal && WincredExists()); AddSimpleCredential(SimpleCredentialType::LocalWinstore, CString(MAKEINTRESOURCE(IDS_LOCAL_WINSTORE)), hasLocal && WinstoreExists()); AddSimpleCredential(SimpleCredentialType::GlobalWincred, CString(MAKEINTRESOURCE(IDS_GLOBAL_WINCRED)), WincredExists()); AddSimpleCredential(SimpleCredentialType::GlobalWinstore, CString(MAKEINTRESOURCE(IDS_GLOBAL_WINSTORE)), WinstoreExists()); AddSimpleCredential(SimpleCredentialType::SystemWincred, CString(MAKEINTRESOURCE(IDS_SYSTEM_WINCRED)), WincredExists()); LoadList(); EnableAdvancedOptions(); UpdateData(FALSE); return TRUE; }
BOOL CSettingGitCredential::OnInitDialog() { ISettingsPropPage::OnInitDialog(); AdjustControlSize(IDC_CHECK_USEHTTPPATH); bool hasLocal = GitAdminDir::HasAdminDir(g_Git.m_CurrentDir); m_ctrlUrlList.ResetContent(); ConfigType::Init(); AddConfigType(ConfigType::Local, CString(MAKEINTRESOURCE(IDS_SETTINGS_LOCAL)), hasLocal); AddConfigType(ConfigType::Global, CString(MAKEINTRESOURCE(IDS_SETTINGS_GLOBAL))); AddConfigType(ConfigType::System, CString(MAKEINTRESOURCE(IDS_SETTINGS_SYSTEM))); m_ctrlConfigType.SetCurSel(0); if (WincredExists()) ((CComboBox*) GetDlgItem(IDC_COMBO_HELPER))->AddString(L"wincred"); if (WinstoreExists()) ((CComboBox*) GetDlgItem(IDC_COMBO_HELPER))->AddString(GetWinstorePath()); if (GCMExists()) ((CComboBox*)GetDlgItem(IDC_COMBO_HELPER))->AddString(L"manager"); SimpleCredentialType::Init(); AddSimpleCredential(SimpleCredentialType::Advanced, CString(MAKEINTRESOURCE(IDS_ADVANCED))); AddSimpleCredential(SimpleCredentialType::None, CString(MAKEINTRESOURCE(IDS_NONE))); AddSimpleCredential(SimpleCredentialType::LocalWincred, CString(MAKEINTRESOURCE(IDS_LOCAL_WINCRED)), hasLocal && WincredExists()); AddSimpleCredential(SimpleCredentialType::LocalWinstore, CString(MAKEINTRESOURCE(IDS_LOCAL_WINSTORE)), hasLocal && WinstoreExists()); AddSimpleCredential(SimpleCredentialType::LocalGCM, CString(MAKEINTRESOURCE(IDS_LOCAL_GCM)), hasLocal && GCMExists()); AddSimpleCredential(SimpleCredentialType::GlobalWincred, CString(MAKEINTRESOURCE(IDS_GLOBAL_WINCRED)), WincredExists()); AddSimpleCredential(SimpleCredentialType::GlobalWinstore, CString(MAKEINTRESOURCE(IDS_GLOBAL_WINSTORE)), WinstoreExists()); AddSimpleCredential(SimpleCredentialType::GlobalGCM, CString(MAKEINTRESOURCE(IDS_GLOBAL_GCM)), GCMExists()); AddSimpleCredential(SimpleCredentialType::SystemWincred, CString(MAKEINTRESOURCE(IDS_SYSTEM_WINCRED)), WincredExists()); AddSimpleCredential(SimpleCredentialType::SystemGCM, CString(MAKEINTRESOURCE(IDS_SYSTEM_GCM)), GCMExists()); LoadList(); EnableAdvancedOptions(); UpdateData(FALSE); return TRUE; }
void CSettingGitCredential::LoadList() { git_config * config; git_config_new(&config); CStringA projectConfigA = CUnicodeUtils::GetUTF8(g_Git.GetGitLocalConfig()); git_config_add_file_ondisk(config, projectConfigA.GetBuffer(), GIT_CONFIG_LEVEL_LOCAL, FALSE); projectConfigA.ReleaseBuffer(); CStringA globalConfigA = CUnicodeUtils::GetUTF8(g_Git.GetGitGlobalConfig()); git_config_add_file_ondisk(config, globalConfigA.GetBuffer(), GIT_CONFIG_LEVEL_GLOBAL, FALSE); globalConfigA.ReleaseBuffer(); CStringA globalXDGConfigA = CUnicodeUtils::GetUTF8(g_Git.GetGitGlobalXDGConfig()); git_config_add_file_ondisk(config, globalXDGConfigA.GetBuffer(), GIT_CONFIG_LEVEL_XDG, FALSE); globalXDGConfigA.ReleaseBuffer(); CStringA systemConfigA = CUnicodeUtils::GetUTF8(g_Git.GetGitSystemConfig()); git_config_add_file_ondisk(config, systemConfigA.GetBuffer(), GIT_CONFIG_LEVEL_SYSTEM, FALSE); systemConfigA.ReleaseBuffer(); STRING_VECTOR defaultList, urlList; git_config_foreach_match(config, "credential\\.helper", GetCredentialDefaultUrlCallback, &defaultList); git_config_foreach_match(config, "credential\\..*\\.helper", GetCredentialUrlCallback, &urlList); STRING_VECTOR anyList; git_config_foreach_match(config, "credential\\..*", GetCredentialAnyEntryCallback, &anyList); git_config_free(config); for (int i = 0; i < defaultList.size(); ++i) m_ctrlUrlList.AddString(defaultList[i]); for (int i = 0; i < urlList.size(); ++i) m_ctrlUrlList.AddString(urlList[i]); if (anyList.empty()) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::None); return; } if (anyList.size() > 1) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::Advanced); return; } int pos = 0; CString prefix = anyList[0].Tokenize(_T("\n"), pos); CString key = anyList[0].Tokenize(_T("\n"), pos); CString value = anyList[0].Tokenize(_T("\n"), pos); if (key != _T("credential.helper")) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::Advanced); return; } CString winstore = GetWinstorePath(); if (prefix == _T("L")) { if (value == _T("wincred")) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::LocalWincred); return; } else if (value == winstore) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::LocalWinstore); return; } } if (prefix == _T("G") || prefix == _T("X")) { if (value == _T("wincred")) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::GlobalWincred); return; } else if (value == winstore) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::GlobalWinstore); return; } } if (prefix == _T("S")) { if (value == _T("wincred")) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::SystemWincred); return; } } m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::Advanced); }
static bool WinstoreExists() { return !!PathFileExists(GetWinstorePath()); }
bool CSettingGitCredential::SaveSimpleCredential(int type) { CONFIG_TYPE configLevel; CString value; if (type == SimpleCredentialType::LocalWincred) { configLevel = CONFIG_LOCAL; value = L"wincred"; } else if (type == SimpleCredentialType::LocalWinstore) { configLevel = CONFIG_LOCAL; value = GetWinstorePath(); } else if (type == SimpleCredentialType::LocalGCM) { configLevel = CONFIG_LOCAL; value = L"manager"; } else if (type == SimpleCredentialType::GlobalWincred) { configLevel = CONFIG_GLOBAL; value = L"wincred"; } else if (type == SimpleCredentialType::GlobalWinstore) { configLevel = CONFIG_GLOBAL; value = GetWinstorePath(); } else if (type == SimpleCredentialType::GlobalGCM) { configLevel = CONFIG_GLOBAL; value = L"manager"; } else if (type == SimpleCredentialType::SystemWincred) { configLevel = CONFIG_SYSTEM; value = L"wincred"; } else if (type == SimpleCredentialType::SystemGCM) { configLevel = CONFIG_SYSTEM; value = L"manager"; } else return true; // workaround gitdll bug // TODO: switch to libgit2 bool old = g_Git.m_IsUseGitDLL; g_Git.m_IsUseGitDLL = false; if (g_Git.SetConfigValue(L"credential.helper", value, configLevel)) { CString msg; msg.Format(IDS_PROC_SAVECONFIGFAILED, L"credential.helper", (LPCTSTR)value); CMessageBox::Show(GetSafeHwnd(), msg, L"TortoiseGit", MB_OK | MB_ICONERROR); return false; } g_Git.m_IsUseGitDLL = old; return true; }
void CSettingGitCredential::LoadList() { CAutoConfig config(true); git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitLocalConfig()), GIT_CONFIG_LEVEL_LOCAL, FALSE); git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitGlobalConfig()), GIT_CONFIG_LEVEL_GLOBAL, FALSE); git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitGlobalXDGConfig()), GIT_CONFIG_LEVEL_XDG, FALSE); git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitSystemConfig()), GIT_CONFIG_LEVEL_SYSTEM, FALSE); if (!g_Git.ms_bCygwinGit && !g_Git.ms_bMsys2Git) git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitProgramDataConfig()), GIT_CONFIG_LEVEL_PROGRAMDATA, FALSE); STRING_VECTOR defaultList, urlList; git_config_foreach_match(config, "credential\\.helper", GetCredentialDefaultUrlCallback, &defaultList); git_config_foreach_match(config, "credential\\..*\\.helper", GetCredentialUrlCallback, &urlList); STRING_VECTOR anyList; git_config_foreach_match(config, "credential\\..*", GetCredentialAnyEntryCallback, &anyList); for (size_t i = 0; i < defaultList.size(); ++i) m_ctrlUrlList.AddString(defaultList[i]); for (size_t i = 0; i < urlList.size(); ++i) m_ctrlUrlList.AddString(urlList[i]); if (anyList.empty()) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::None); return; } if (anyList.size() > 1) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::Advanced); return; } int pos = 0; CString prefix = anyList[0].Tokenize(L"\n", pos); CString key = anyList[0].Tokenize(L"\n", pos); CString value = anyList[0].Tokenize(L"\n", pos); if (key != L"credential.helper") { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::Advanced); return; } CString winstore = GetWinstorePath(); if (prefix == L"L") { if (value == L"wincred") { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::LocalWincred); return; } else if (value == winstore) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::LocalWinstore); return; } else if (value == L"manager") { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::LocalGCM); return; } } if (prefix == L"G" || prefix == L"X") { if (value == L"wincred") { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::GlobalWincred); return; } else if (value == winstore) { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::GlobalWinstore); return; } else if (value == L"manager") { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::GlobalGCM); return; } } if (prefix == L"S" || prefix == L"P") { if (value == L"wincred") { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::SystemWincred); return; } else if (value == L"manager") { m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::SystemGCM); return; } } m_ctrlSimpleCredential.SetCurSel(SimpleCredentialType::Advanced); }