Skip to content

Commit 67903b2

Browse files
committedJul 27, 2023
fix(bug): no instance port when use docker
1 parent 4351635 commit 67903b2

File tree

5 files changed

+90
-61
lines changed

5 files changed

+90
-61
lines changed
 

‎src/GZCTF/ClientApp/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"@types/marked": "^5.0.1",
5252
"@types/node": "20.4.5",
5353
"@types/prismjs": "^1.26.0",
54-
"@types/react": "^18.2.16",
54+
"@types/react": "^18.2.17",
5555
"@types/react-dom": "^18.2.7",
5656
"@typescript-eslint/eslint-plugin": "^6.2.0",
5757
"@typescript-eslint/parser": "^6.2.0",

‎src/GZCTF/ClientApp/pnpm-lock.yaml

+44-44
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/GZCTF/ClientApp/src/Api.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -546,13 +546,13 @@ export interface ContainerInstanceModel {
546546
* @format date-time
547547
*/
548548
expectStopAt?: string
549-
/** 公开 IP */
550-
publicIP?: string | null
549+
/** 访问 IP */
550+
publicIP?: string
551551
/**
552-
* 公开端口
552+
* 访问端口
553553
* @format int32
554554
*/
555-
publicPort?: number | null
555+
publicPort?: number
556556
}
557557

558558
/** 队伍信息 */

‎src/GZCTF/ClientApp/src/pages/admin/Instances.tsx

+34-6
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ import {
1212
Badge,
1313
Box,
1414
Code,
15+
Tooltip,
1516
} from '@mantine/core'
17+
import { useClipboard } from '@mantine/hooks'
1618
import { showNotification } from '@mantine/notifications'
1719
import {
1820
mdiAccountGroupOutline,
@@ -26,7 +28,7 @@ import { ActionIconWithConfirm } from '@Components/ActionIconWithConfirm'
2628
import AdminPage from '@Components/admin/AdminPage'
2729
import { showErrorNotification } from '@Utils/ApiErrorHandler'
2830
import { ChallengeTagLabelMap } from '@Utils/Shared'
29-
import { useTableStyles } from '@Utils/ThemeOverride'
31+
import { useTableStyles, useTooltipStyles } from '@Utils/ThemeOverride'
3032
import api, { ChallengeModel, ChallengeTag, TeamModel } from '@Api'
3133

3234
type SelectTeamItemProps = TeamModel & React.ComponentPropsWithoutRef<'div'>
@@ -76,6 +78,8 @@ const Instances: FC = () => {
7678
const [challenge, setChallenge] = useState<ChallengeModel[]>()
7779
const [disabled, setDisabled] = useState(false)
7880
const { classes, theme } = useTableStyles()
81+
const clipBoard = useClipboard()
82+
const { classes: tooltipClasses } = useTooltipStyles()
7983

8084
useEffect(() => {
8185
if (instances) {
@@ -246,12 +250,36 @@ const Instances: FC = () => {
246250
</Group>
247251
</td>
248252
<td>
249-
<Text size="sm" ff={theme.fontFamilyMonospace} color="dimmed">
250-
{`${inst.publicIP}:`}
251-
<Text span weight="bold" color="white">
252-
{inst.publicPort}
253+
<Tooltip
254+
label="点击复制"
255+
withArrow
256+
position="left"
257+
classNames={tooltipClasses}
258+
>
259+
<Text
260+
size="sm"
261+
color="dimmed"
262+
ff={theme.fontFamilyMonospace}
263+
style={{
264+
backgroundColor: 'transparent',
265+
fontSize: theme.fontSizes.sm,
266+
cursor: 'pointer',
267+
}}
268+
onClick={() => {
269+
clipBoard.copy(`${inst.publicIP ?? ''}:${inst.publicPort ?? ''}`)
270+
showNotification({
271+
color: 'teal',
272+
message: '实例入口已复制到剪贴板',
273+
icon: <Icon path={mdiCheck} size={1} />,
274+
})
275+
}}
276+
>
277+
{`${inst.publicIP}:`}
278+
<Text span weight="bold" color="white">
279+
{inst.publicPort}
280+
</Text>
253281
</Text>
254-
</Text>
282+
</Tooltip>
255283
</td>
256284
<td align="right">
257285
<Group noWrap spacing="sm" position="right">

‎src/GZCTF/Models/Request/Admin/ContainerInstanceModel.cs

+7-6
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@ public class ContainerInstanceModel
4343
public DateTimeOffset ExpectStopAt { get; set; } = DateTimeOffset.UtcNow + TimeSpan.FromHours(2);
4444

4545
/// <summary>
46-
/// 公开 IP
46+
/// 访问 IP
4747
/// </summary>
48-
public string? PublicIP { get; set; }
48+
public string PublicIP { get; set; } = string.Empty;
4949

5050
/// <summary>
51-
/// 公开端口
51+
/// 访问端口
5252
/// </summary>
53-
public int? PublicPort { get; set; }
53+
public int PublicPort { get; set; }
5454

5555
internal static ContainerInstanceModel FromContainer(Container container)
5656
{
@@ -64,8 +64,9 @@ internal static ContainerInstanceModel FromContainer(Container container)
6464
ContainerId = container.ContainerId,
6565
StartedAt = container.StartedAt,
6666
ExpectStopAt = container.ExpectStopAt,
67-
PublicIP = container.PublicIP,
68-
PublicPort = container.PublicPort
67+
// fallback to host if public is null
68+
PublicIP = container.PublicIP ?? container.IP,
69+
PublicPort = container.PublicPort ?? container.Port
6970
};
7071

7172
if (team is not null && chal is not null)

0 commit comments

Comments
 (0)
Please sign in to comment.