Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
69141a7
feat: start
IMB11 Jul 14, 2025
8a36bdc
feat: header controls for review page
IMB11 Jul 14, 2025
ba690ff
feat: progress
IMB11 Jul 14, 2025
9db00ed
fix: layout completed for review page
IMB11 Jul 15, 2025
0434530
Merge branch 'main' into cal/dev-161-moderation-dashboard-overhaul
IMB11 Jul 17, 2025
08e2b37
feat: use pinia store for moderation queue
IMB11 Jul 17, 2025
b08d23f
feat: implement moderation button logic + fix links
IMB11 Jul 17, 2025
9e11846
feat: reports fetching + types for threads
IMB11 Jul 17, 2025
9ad5e8a
feat: report cards start
IMB11 Jul 17, 2025
75ea7cb
feat: reports page layout
IMB11 Jul 17, 2025
f7d462d
feat: use Fuse fuzzy search + color dates depending on severity
IMB11 Jul 17, 2025
e07638c
feat: basic report card information
IMB11 Jul 17, 2025
3e1a419
fix: lint issues
IMB11 Jul 17, 2025
6a5a5f1
fix: cleanup report card collapsible part
IMB11 Jul 19, 2025
8f0613b
feat: extract collapsible region card
IMB11 Jul 19, 2025
dabdb38
feat: finish report card functionality & reports page functionality
IMB11 Jul 19, 2025
6216323
chore: comment out old checklist
IMB11 Jul 19, 2025
e4a93af
chore: remove old checklist + clean up folders
IMB11 Jul 19, 2025
43cf705
feat: mobile responsiveness changes
IMB11 Jul 19, 2025
feb05e0
feat: add id to delphi types
IMB11 Jul 19, 2025
5c401da
feat: add nyi notice
IMB11 Jul 19, 2025
b5df7a2
Merge branch 'main' into cal/dev-161-moderation-dashboard-overhaul
IMB11 Jul 19, 2025
a14c3be
fix: terminology
IMB11 Jul 19, 2025
a520a22
feat: add req status
IMB11 Jul 19, 2025
c388bf5
Revert "Author Validation Improvements (#3970)" (#4024)
Prospector Jul 19, 2025
4e212dc
Update changelog
Prospector Jul 19, 2025
ee903c2
Add more info about last attempts to admin billing dashboard (#4029)
triphora Jul 21, 2025
c899d95
Use rust-lld linker on MSVC Windows (#4042)
Gaming32 Jul 21, 2025
9c73465
feat(app): configurable Modrinth endpoints through .env files (#4015)
AlexTMjugador Jul 21, 2025
a49eb42
perf(docker): cache image builds through cache mounts and GHA cache (…
AlexTMjugador Jul 22, 2025
c916044
chore(ci): switch back to upstream `cache-cargo-install-action` (#4047)
AlexTMjugador Jul 22, 2025
48c3b64
feat(app): better external browser Modrinth login flow (#4033)
AlexTMjugador Jul 22, 2025
3887eb4
fix: handle identified files properly in the checklist (#4004)
IMB11 Jul 23, 2025
d501edb
Bump report limit to 1500
Prospector Jul 24, 2025
ba11047
else if
Prospector Jul 24, 2025
6cf4fb1
fix: merge issues
IMB11 Jul 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,8 @@
[target.'cfg(windows)']
rustflags = ["-C", "link-args=/STACK:16777220", "--cfg", "tokio_unstable"]

[target.x86_64-pc-windows-msvc]
linker = "rust-lld"

[build]
rustflags = ["--cfg", "tokio_unstable"]
13 changes: 8 additions & 5 deletions .github/workflows/daedalus-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,26 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Fetch docker metadata
id: docker_meta
uses: docker/metadata-action@v3
uses: docker/metadata-action@v5
with:
images: ghcr.io/modrinth/daedalus
- name: Login to GitHub Images
uses: docker/login-action@v1
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
uses: docker/build-push-action@v6
with:
file: ./apps/daedalus_client/Dockerfile
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}
cache-from: type=registry,ref=ghcr.io/modrinth/daedalus:main
cache-to: type=inline
13 changes: 8 additions & 5 deletions .github/workflows/labrinth-docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,23 +20,26 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Fetch docker metadata
id: docker_meta
uses: docker/metadata-action@v3
uses: docker/metadata-action@v5
with:
images: ghcr.io/modrinth/labrinth
- name: Login to GitHub Images
uses: docker/login-action@v1
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
uses: docker/build-push-action@v6
with:
file: ./apps/labrinth/Dockerfile
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}
cache-from: type=registry,ref=ghcr.io/modrinth/labrinth:main
cache-to: type=inline
4 changes: 3 additions & 1 deletion .github/workflows/theseus-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ jobs:
rename-to: ${{ startsWith(matrix.platform, 'windows') && 'dasel.exe' || 'dasel' }}
chmod: 0755

- name: ⚙️ Set application version
- name: ⚙️ Set application version and environment
shell: bash
run: |
APP_VERSION="$(git describe --tags --always | sed -E 's/-([0-9]+)-(g[0-9a-fA-F]+)$/-canary+\1.\2/')"
Expand All @@ -84,6 +84,8 @@ jobs:
dasel put -f packages/app-lib/Cargo.toml -t string -v "${APP_VERSION#v}" 'package.version'
dasel put -f apps/app-frontend/package.json -t string -v "${APP_VERSION#v}" 'version'
cp packages/app-lib/.env.prod packages/app-lib/.env
- name: 💨 Setup Turbo cache
uses: rharkor/[email protected]

Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/turbo-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:
# cargo-binstall does not have pre-built binaries for sqlx-cli, so we fall
# back to a cached cargo install
- name: 🧰 Setup cargo-sqlx
uses: AlexTMjugador/cache-cargo-install-action@feat/features-support
uses: taiki-e/cache-cargo-install-action@v2
with:
tool: sqlx-cli
locked: false
Expand All @@ -74,6 +74,10 @@ jobs:
cp .env.local .env
sqlx database setup

- name: ⚙️ Set app environment
working-directory: packages/app-lib
run: cp .env.staging .env

- name: 🔍 Lint and test
run: pnpm run ci

Expand Down
3 changes: 3 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ heck = "0.5.0"
hex = "0.4.3"
hickory-resolver = "0.25.2"
hmac = "0.12.1"
hyper = "1.6.0"
hyper-rustls = { version = "0.27.7", default-features = false, features = [
"http1",
"native-tokio",
Expand Down
28 changes: 25 additions & 3 deletions apps/app-frontend/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,10 @@ import { renderString } from '@modrinth/utils'
import { useFetch } from '@/helpers/fetch.js'
import { check } from '@tauri-apps/plugin-updater'
import NavButton from '@/components/ui/NavButton.vue'
import { get as getCreds, login, logout } from '@/helpers/mr_auth.js'
import { cancelLogin, get as getCreds, login, logout } from '@/helpers/mr_auth.js'
import { get_user } from '@/helpers/cache.js'
import AppSettingsModal from '@/components/ui/modal/AppSettingsModal.vue'
import AuthGrantFlowWaitModal from '@/components/ui/modal/AuthGrantFlowWaitModal.vue'
import PromotionWrapper from '@/components/ui/PromotionWrapper.vue'
import { hide_ads_window, init_ads_window } from '@/helpers/ads.js'
import FriendsList from '@/components/ui/friends/FriendsList.vue'
Expand Down Expand Up @@ -263,6 +264,8 @@ const incompatibilityWarningModal = ref()

const credentials = ref()

const modrinthLoginFlowWaitModal = ref()

async function fetchCredentials() {
const creds = await getCreds().catch(handleError)
if (creds && creds.user_id) {
Expand All @@ -272,8 +275,24 @@ async function fetchCredentials() {
}

async function signIn() {
await login().catch(handleError)
await fetchCredentials()
modrinthLoginFlowWaitModal.value.show()

try {
await login()
await fetchCredentials()
} catch (error) {
if (
typeof error === 'object' &&
typeof error['message'] === 'string' &&
error.message.includes('Login canceled')
) {
// Not really an error due to being a result of user interaction, show nothing
} else {
handleError(error)
}
} finally {
modrinthLoginFlowWaitModal.value.hide()
}
}

async function logOut() {
Expand Down Expand Up @@ -402,6 +421,9 @@ function handleAuxClick(e) {
<Suspense>
<AppSettingsModal ref="settingsModal" />
</Suspense>
<Suspense>
<AuthGrantFlowWaitModal ref="modrinthLoginFlowWaitModal" @flow-cancel="cancelLogin" />
</Suspense>
<Suspense>
<InstanceCreationModal ref="installationModal" />
</Suspense>
Expand Down
14 changes: 9 additions & 5 deletions apps/app-frontend/src/components/ui/InstanceCreationModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -305,12 +305,16 @@ const [
get_game_versions().then(shallowRef).catch(handleError),
get_loaders()
.then((value) =>
value
.filter((item) => item.supported_project_types.includes('modpack'))
.map((item) => item.name.toLowerCase()),
ref(
value
.filter((item) => item.supported_project_types.includes('modpack'))
.map((item) => item.name.toLowerCase()),
),
)
.then(ref)
.catch(handleError),
.catch((err) => {
handleError(err)
return ref([])
}),
])
loaders.value.unshift('vanilla')

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<script setup lang="ts">
import { LogInIcon, SpinnerIcon } from '@modrinth/assets'
import { ref } from 'vue'
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'

defineProps({
onFlowCancel: {
type: Function,
default() {
return async () => {}
},
},
})

const modal = ref()

function show() {
modal.value.show()
}

function hide() {
modal.value.hide()
}

defineExpose({ show, hide })
</script>
<template>
<ModalWrapper ref="modal" @hide="onFlowCancel">
<template #title>
<span class="items-center gap-2 text-lg font-extrabold text-contrast">
<LogInIcon /> Sign in
</span>
</template>

<div class="flex justify-center gap-2">
<SpinnerIcon class="w-12 h-12 animate-spin" />
</div>
<p class="text-sm text-secondary">
Please sign in at the browser window that just opened to continue.
</p>
</ModalWrapper>
</template>
4 changes: 4 additions & 0 deletions apps/app-frontend/src/helpers/mr_auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,7 @@ export async function logout() {
export async function get() {
return await invoke('plugin:mr-auth|get')
}

export async function cancelLogin() {
return await invoke('plugin:mr-auth|cancel_modrinth_login')
}
2 changes: 1 addition & 1 deletion apps/app-playground/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub async fn authenticate_run() -> theseus::Result<Credentials> {
println!("A browser window will now open, follow the login flow there.");
let login = minecraft_auth::begin_login().await?;

println!("Open URL {} in a browser", login.redirect_uri.as_str());
println!("Open URL {} in a browser", login.auth_request_uri.as_str());

println!("Please enter URL code: ");
let mut input = String::new();
Expand Down
2 changes: 2 additions & 0 deletions apps/app/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ thiserror.workspace = true
daedalus.workspace = true
chrono.workspace = true
either.workspace = true
hyper = { workspace = true, features = ["server"] }
hyper-util.workspace = true

url.workspace = true
urlencoding.workspace = true
Expand Down
7 changes: 6 additions & 1 deletion apps/app/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,12 @@ fn main() {
.plugin(
"mr-auth",
InlinedPlugin::new()
.commands(&["modrinth_login", "logout", "get"])
.commands(&[
"modrinth_login",
"logout",
"get",
"cancel_modrinth_login",
])
.default_permission(
DefaultPermissionRule::AllowAllCommands,
),
Expand Down
3 changes: 2 additions & 1 deletion apps/app/src/api/auth.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ pub async fn login<R: Runtime>(
let window = tauri::WebviewWindowBuilder::new(
&app,
"signin",
tauri::WebviewUrl::External(flow.redirect_uri.parse().map_err(
tauri::WebviewUrl::External(flow.auth_request_uri.parse().map_err(
|_| {
theseus::ErrorKind::OtherError(
"Error parsing auth redirect URL".to_string(),
Expand Down Expand Up @@ -77,6 +77,7 @@ pub async fn login<R: Runtime>(
window.close()?;
Ok(None)
}

#[tauri::command]
pub async fn remove_user(user: uuid::Uuid) -> Result<()> {
Ok(minecraft_auth::remove_user(user).await?)
Expand Down
2 changes: 2 additions & 0 deletions apps/app/src/api/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ pub mod cache;
pub mod friends;
pub mod worlds;

mod oauth_utils;

pub type Result<T> = std::result::Result<T, TheseusSerializableError>;

// // Main returnable Theseus GUI error
Expand Down
Loading