Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ MITM debugging proxy with a web GUI to view and modify all of the HTTP and HTTPS

### Install

> Mac: **[allproxy.dmg](https://github.com/allproxy/allproxy/releases/download/v3.26.0/allproxy-3.26.4-x64.dmg)**
> Mac: **[allproxy.dmg](https://github.com/allproxy/allproxy/releases/download/v3.27.0/allproxy-3.27.0-x64.dmg)**

> RedHat: **[allproxy.rpm](https://github.com/allproxy/allproxy/releases/download/v3.26.0/allproxy-3.26.4-1.x86_64.rpm)**
> RedHat: **[allproxy.rpm](https://github.com/allproxy/allproxy/releases/download/v3.27.0/allproxy-3.27.0-1.x86_64.rpm)**

> Ubuntu: **[allproxy.deb](https://github.com/allproxy/allproxy/releases/download/v3.26.0/allproxy_3.26.4_amd64.deb)**
> Ubuntu: **[allproxy.deb](https://github.com/allproxy/allproxy/releases/download/v3.27.0/allproxy_3.27.0_amd64.deb)**

> Windows: **[Setup.exe](https://github.com/allproxy/allproxy/releases/download/v3.26.0/allproxy-3.26.4.Setup.exe)**
> Windows: **[Setup.exe](https://github.com/allproxy/allproxy/releases/download/v3.27.0/allproxy-3.27.0.Setup.exe)**

> Other install options:
> 1. Install NPM package: **npm install -g allproxy**
Expand Down
2 changes: 1 addition & 1 deletion client/src/App.css
Original file line number Diff line number Diff line change
Expand Up @@ -688,7 +688,7 @@ td input {

.request__msg-time-bar-container {
margin-left: .5rem;
min-width: 8ch;
min-width: 6.5rem;
display: flex;
align-items: center;
justify-content: right;
Expand Down
6 changes: 6 additions & 0 deletions client/src/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import FilterStore from '../store/FilterStore';
import { observer } from 'mobx-react-lite';
import BreakpointStore from '../store/BreakpointStore';
import ExcludeTags from './ExcludeTags';
import { messageQueueStore } from '../store/MessageQueueStore';

/**
* Footer view
Expand All @@ -13,6 +14,11 @@ type Props = {
const Footer = observer(({ filterStore, breakpointStore }: Props): JSX.Element => {
return (
<div className="footer__container">
<div>
<div className="footer__item" title="Number of messages">
<div>Messages: {messageQueueStore.getUnfilteredCount()} of {messageQueueStore.getTotalLength()}</div>
</div>
</div>
<div>
<div className="footer__item" title="Number of active breakpoints">
<div>Breakpoints: {breakpointStore.getBreakpointCount()}</div>
Expand Down
20 changes: 10 additions & 10 deletions client/src/components/Request.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,21 @@ type Props = {
onClick: () => void,
onResend: () => void,
store: MessageStore,
timeBarPercent: string,
maxStatusSize: number,
maxMethodSize: number,
maxEndpointSize: number,
vertical: boolean,
isFiltered: boolean,
};
const Request = observer(({ isActive, highlight, onClick, store, onResend, timeBarPercent, maxStatusSize, maxMethodSize, maxEndpointSize, vertical, isFiltered }: Props) => {
const Request = observer(({ isActive, highlight, onClick, store, onResend, maxStatusSize, maxMethodSize, maxEndpointSize, vertical, isFiltered }: Props) => {
const [openNoteDialog, setOpenNoteDialog] = React.useState(false);

const handleClick = () => {
onClick();
store.setVisited(true);
}
const message = store.getMessage();
const percent = store.isNoResponse() ? '100%' : timeBarPercent;
const responseTime = store.isNoResponse() ? 'no response' : message.elapsedTime ? message.elapsedTime + ' ms' : '';
const messageDate = new Date(message.timestamp);
const levelColor = function (level: string): string | undefined {
if (level === 'err' || level === 'error') return 'red';
if (level === 'warning' || level === 'warn') return 'rgb(203, 75, 22)';
Expand All @@ -45,17 +43,18 @@ const Request = observer(({ isActive, highlight, onClick, store, onResend, timeB
<div className="request__msg-header">
<div className="request__msg-time-ms">
{message.protocol !== 'log:' ?
responseTime
<div className="request__msg-log-level" style={{ fontFamily: 'monospace' }}
title={message.elapsedTime + ' ms, ' + formatTimestamp(message.timestamp)}>
{store.isNoResponse() ? 'no response' : dateToHHMMSS(messageDate)}
</div>
:
<div className="request__msg-log-level" style={{ fontFamily: 'monospace' }}
title={store.getLogEntry().date.toLocaleDateString()}>
{dateToHHMMSS(store.getLogEntry().date)}
</div>}
</div>
}
</div>
<div className="request__msg-time-bar-container">
<div style={{ width: `calc(100% - ${percent})` }} />
<div className={'request__msg-time-bar' + (store.isNoResponse() ? ' no-response' : '')}
style={{ width: percent }} />
</div>
<div className="request__msg-icon fa fa-sticky-note"
title={store.getNote()}
Expand Down Expand Up @@ -200,7 +199,8 @@ export function formatTimestamp(timestamp: number) {
}

export function dateToHHMMSS(d: Date) {
return d.getHours().toString().padStart(2, '0') + ':' + d.getMinutes().toString().padStart(2, '0') + ':' + d.getSeconds().toString().padStart(2, '0');
const monthDay = d.getMonth() + 1 + '/' + d.getDate();
return monthDay + ' ' + d.getHours().toString().padStart(2, '0') + ':' + d.getMinutes().toString().padStart(2, '0') + ':' + d.getSeconds().toString().padStart(2, '0');
}

export default Request;
16 changes: 0 additions & 16 deletions client/src/components/SnapshotTabContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -95,27 +95,15 @@ const SnapshotTabContent = observer(({
}
}

const shouldShowTimeBar = (message: Message) => {
if (message.protocol === 'log:') {
const catFile = message.proxyConfig!.path && message.proxyConfig!.path.startsWith('cat ');
return catFile;
}
return true;
}

let maxStatusSize = 0;
let maxMethodSize = 0;
let maxEndpointSize = 0;
let maxElapsedTime = 0;
messageQueueStore.getMessages()
.forEach(messageStore => {
maxStatusSize = Math.max(maxStatusSize, (messageStore.getMessage().status + '').length);
const method = messageStore.getMessage().method;
maxMethodSize = Math.max(maxMethodSize, method ? method.length : 0);
maxEndpointSize = Math.max(maxEndpointSize, messageStore.getMessage().endpoint.length);
if (!shouldShowTimeBar(messageStore.getMessage())) return;
const et = messageStore.getMessage().elapsedTime ? messageStore.getMessage().elapsedTime : 0;
maxElapsedTime = Math.max(maxElapsedTime, et);
});

let activeRequestIndex = Number.MAX_SAFE_INTEGER;
Expand Down Expand Up @@ -165,9 +153,6 @@ const SnapshotTabContent = observer(({
activeRequestIndex = index;
}
matchCount++;
const timeBarPercent = maxElapsedTime > 0 && shouldShowTimeBar(message)
? (message.elapsedTime ? ((message.elapsedTime * 100) / maxElapsedTime) : 1)
: 0;
return (
<Request
maxStatusSize={maxStatusSize}
Expand All @@ -177,7 +162,6 @@ const SnapshotTabContent = observer(({
key={seqNum}
isActive={isActiveRequest}
highlight={seqNum === messageQueueStore.getHighlightSeqNum()}
timeBarPercent={timeBarPercent + '%'}
onClick={() => messageQueueStore.getMessages().length > 1000 ?
setClickPendingSeqNum(seqNum)
:
Expand Down
10 changes: 10 additions & 0 deletions client/src/store/MessageQueueStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,16 @@ export default class MessageQueueStore {
return count;
}

public getUnfilteredCount() {
let count = 0;
for (const message of this.getMessages()) {
if (!message.isFiltered()) {
++count;
}
}
return count;
}

@action private sort() {
const selectedMessages = snapshotStore.getSelectedMessages();
const copyMessages = selectedMessages.slice(); // shallow copy
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

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

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "allproxy",
"version": "3.26.4",
"version": "3.27.0",
"description": "AllProxy: MITM HTTP Debugging Tool.",
"keywords": [
"proxy",
Expand Down