Comments (8)
Looking at it, I think I'd like a name that would make a good namespace for both individual IPs and ranges. RemoteIp.Block.encode/1
actually encodes a single IP, so it reads kind of awkwardly when it's in the same module as the IP block functions. Would rather an Address.encode/1
and a Block.contains?/2
sort of distinction.
from remote_ip.
Yes, all good points. I was thinking many of the same things in my brain's background threads. Enum.any?(&contains?)
check. Just have to document all the performance caveats.
I'll see what I can put together this weekend, even if it's just a v0.1.0 with the exact same interface as the current RemoteIp.Block
.
from remote_ip.
Okay, I have the repo live at https://github.com/ajvondrak/bitwise_ip. Tests all pass, the API seems stable enough, and the benchmarks show it to be on par with remote_ip. I also went on some side quests doing fun things like implementing the Enumerable
protocol on BitwiseIp.Block
.
To do:
- get all the packaging figured out so I can publish v0.1.0 to hex.pm; I'm going to try to get that done today
- docs; I doubt I'll get them done today, so I'll throw some generic "under construction" stuff up for the development release
- after docs are ready, it's probably okay to ship it as v1.0.0 (i.e., the first not-development release)
- any other feature requests? feedback?
Edit: Oh yeah, and the future goal of moving RemoteIp
onto using BitwiseIp
, of course.
from remote_ip.
Sure, I'd love to split it off into a separate package! Makes me happy to know someone noticed my yak shaving.
It shouldn't be that much work - really, just the plumbing and docs and all, but that's mostly a matter of copy/paste/rearrange. I can make a little weekend project of it. I guess the hardest part would be coming up with a good name. IpBlock
?
from remote_ip.
I think that IpBlock
is a good name, which would allow for IpBlock.Address.encode/1
and IpBlock.contains?/2
.
From a usability perspective, it would probably be good if IpBlock.contains?/2
handled both encoded and unencoded IPs and parsed and unparsed ranges. This would make it (reasonably) possible to use the library correctly without making silly mistakes like I did and you pointed out. I’d say maybe something like this for a spec:
@type t :: %__MODULE__{}
@type encoded_range :: t | list(t)
@type unencoded_range :: binary() | list(binary())
@type range :: encoded_range | unencoded_range
@type unencoded_ip :: binary()
@type encoded_ip :: {:v4 | :v6, integer()}
@type ip :: encoded_ip | unencoded_ip
@spec contains?(range, ip) :: boolean()
If it would be preferable to have the list handling separately, then any_contains?/2
might be viable (even though that’s pretty much the same as Enum.any?(ranges, &contains?(&1, encoded_ip)
. I am thinking that the implementation of these would make it harder to use the library wrong, but it would still be worth documenting the advantages of pre-encoding/pre-parsing for long-term performance in tight loops.
from remote_ip.
Thanks! I’ll wait to release my package until you’ve got the 0.1.0
released.
from remote_ip.
I’ll look at this a bit later and give you some feedback.
from remote_ip.
Closed via ajvondrak/bitwise_ip#1.
from remote_ip.
Related Issues (16)
- Add inet_cidr to included_applications HOT 5
- @reserved is incorrect HOT 1
- problem with rewritten IP HOT 2
- :combine should not be in :included_applications
- Dialyzer warning HOT 5
- Question about mapped-ipv4 ipv6 format HOT 3
- X-Forwarded-For is parsed incorrectly! HOT 3
- Good article on `x-forwarded-for` parsing HOT 10
- Unsure of Implementation HOT 5
- Support for `Fly-Client-IP`? HOT 7
- Plug.Conn also has get_peer_data, which returns the original ip HOT 3
- Parse X-Forwarded-Port and X-Forwarded-Proto HOT 3
- Doesn't Work Running Server in Docker Container HOT 5
- Any way to pass runtime information to `init` HOT 1
- RFC1918 IPs shouldn't be discarded by default HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from remote_ip.