You've already forked AstralRinth
forked from didirus/AstralRinth
Check for write access before change. (#890)
* Check for write access before change. Closes #862 * Formatting.
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
//! Theseus profile management interface
|
//! Theseus profile management interface
|
||||||
|
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
use tokio::fs;
|
||||||
|
|
||||||
use io::IOError;
|
use io::IOError;
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock;
|
||||||
@@ -188,3 +189,17 @@ pub async fn set_config_dir(new_config_dir: PathBuf) -> crate::Result<()> {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn is_dir_writeable(new_config_dir: PathBuf) -> crate::Result<bool> {
|
||||||
|
let temp_path = new_config_dir.join(".tmp");
|
||||||
|
match fs::write(temp_path.clone(), "test").await {
|
||||||
|
Ok(_) => {
|
||||||
|
fs::remove_file(temp_path).await?;
|
||||||
|
Ok(true)
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
tracing::error!("Error writing to new config dir: {}", e);
|
||||||
|
Ok(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ pub fn init<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
|
|||||||
.invoke_handler(tauri::generate_handler![
|
.invoke_handler(tauri::generate_handler![
|
||||||
settings_get,
|
settings_get,
|
||||||
settings_set,
|
settings_set,
|
||||||
settings_change_config_dir
|
settings_change_config_dir,
|
||||||
|
settings_is_dir_writeable
|
||||||
])
|
])
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
@@ -37,3 +38,11 @@ pub async fn settings_change_config_dir(new_config_dir: PathBuf) -> Result<()> {
|
|||||||
settings::set_config_dir(new_config_dir).await?;
|
settings::set_config_dir(new_config_dir).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tauri::command]
|
||||||
|
pub async fn settings_is_dir_writeable(
|
||||||
|
new_config_dir: PathBuf,
|
||||||
|
) -> Result<bool> {
|
||||||
|
let res = settings::is_dir_writeable(new_config_dir).await?;
|
||||||
|
Ok(res)
|
||||||
|
}
|
||||||
|
|||||||
@@ -43,3 +43,7 @@ export async function set(settings) {
|
|||||||
export async function change_config_dir(newConfigDir) {
|
export async function change_config_dir(newConfigDir) {
|
||||||
return await invoke('plugin:settings|settings_change_config_dir', { newConfigDir })
|
return await invoke('plugin:settings|settings_change_config_dir', { newConfigDir })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function is_dir_writeable(newConfigDir) {
|
||||||
|
return await invoke('plugin:settings|settings_is_dir_writeable', { newConfigDir })
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import {
|
|||||||
UpdatedIcon,
|
UpdatedIcon,
|
||||||
} from 'omorphia'
|
} from 'omorphia'
|
||||||
import { handleError, useTheming } from '@/store/state'
|
import { handleError, useTheming } from '@/store/state'
|
||||||
import { change_config_dir, get, set } from '@/helpers/settings'
|
import { is_dir_writeable, change_config_dir, get, set } from '@/helpers/settings'
|
||||||
import { get_max_memory } from '@/helpers/jre'
|
import { get_max_memory } from '@/helpers/jre'
|
||||||
import { get as getCreds, logout } from '@/helpers/mr_auth.js'
|
import { get as getCreds, logout } from '@/helpers/mr_auth.js'
|
||||||
import JavaSelector from '@/components/ui/JavaSelector.vue'
|
import JavaSelector from '@/components/ui/JavaSelector.vue'
|
||||||
@@ -116,7 +116,18 @@ async function signInAfter() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function findLauncherDir() {
|
async function findLauncherDir() {
|
||||||
const newDir = await open({ multiple: false, directory: true })
|
const newDir = await open({
|
||||||
|
multiple: false,
|
||||||
|
directory: true,
|
||||||
|
title: 'Select a new app directory',
|
||||||
|
})
|
||||||
|
|
||||||
|
const writeable = await is_dir_writeable(newDir)
|
||||||
|
|
||||||
|
if (!writeable) {
|
||||||
|
handleError('The selected directory does not have proper permissions for write access.')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (newDir) {
|
if (newDir) {
|
||||||
settingsDir.value = newDir
|
settingsDir.value = newDir
|
||||||
|
|||||||
Reference in New Issue
Block a user